Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.04.2012, 15:15
Sk1f Sk1f вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 5
Репутация: 10
Восклицание Не получается фильтр для изображений...

Здравствуйте программеры. Делаю дипломный проект с видео, скриншотами и детектированием дефектов. Все, вроде бы, получается, но вот проблема, фильтр выделения границ с конволюционной матрицей не выходит. Сделал маленькую прогу, только с фильтром, чтобы выяснить проблему. Но там тоже самое, вместо выделения границ, получается бред какой-то. Вот эта маленькая прога:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, dialogs,
   jpeg, DSPack, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,y:integer;
  u:PbyteArray;
implementation

{$R *.dfm}
procedure Tform1.button1click (Sender: TObject);
begin
image1.Picture.bitmap.LoadFromFile('d:\123.jpg');
end;
procedure Tform1.button2click (Sender: TObject);
begin
for y:=0 to image1.height-1 do
  begin
    for x:=0 to image1.width-1 do
    begin

 Image1.canvas.Pixels[X, Y]:=
                      (((-1)*Image1.canvas.Pixels [x-1,y+1])+
                      ((-1)*Image1.canvas.Pixels[x,y+1])+
                      ((-1)*Image1.canvas.Pixels[x+1,y+1])+
                      ((-1)*Image1.canvas.Pixels[x-1,y])+
                      ((8)*Image1.canvas.Pixels[x,y])+
                      ((-1)*Image1.canvas.Pixels[x+1,y])+
                      ((-1)*Image1.canvas.Pixels[x-1,y-1])+
                      ((-1)*Image1.canvas.Pixels[x,y-1])+
                      ((-1)*Image1.canvas.Pixels[x+1,y+1])) div 1+128;

 end;
  end;
  end;
end.


Подскажите, что не так, а то всю голову уже сломал себе...

Последний раз редактировалось Sk1f, 13.04.2012 в 15:22.
Ответить с цитированием
  #2  
Старый 13.04.2012, 15:42
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию


если рисовать на другом image
Ответить с цитированием
  #3  
Старый 13.04.2012, 15:49
Sk1f Sk1f вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 5
Репутация: 10
По умолчанию

ВО. Уже что-то похожее, но все равно какие-то непонятные шумы, а должно получиться что-то вроде
Ответить с цитированием
  #4  
Старый 13.04.2012, 16:09
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию


это по getrvalue от цвета

Последний раз редактировалось Pyro, 13.04.2012 в 16:17.
Ответить с цитированием
  #5  
Старый 13.04.2012, 16:21
Sk1f Sk1f вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 5
Репутация: 10
По умолчанию

это просто надо сначала в ч/б перевести , а потом фильтр применять, как я понял, да?
И еще вопрос, как у вас нормально получается загружать любой JPG, а то мне пишет "Bitmap image is not valid". Пробовал Image2:tjpegimage, но тогда image1.canvas.pixels[x,y] не может выполняться, т.к. canvas с bitmap только работает?
Ответить с цитированием
  #6  
Старый 13.04.2012, 16:44
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

bmp загружаю
чб просто выравнивает r, g, b
в формуле надо использовать не цвет, а getrvalue() от цвета
+ там ошибка вроде в формуле
Ответить с цитированием
  #7  
Старый 13.04.2012, 16:45
Sk1f Sk1f вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 5
Репутация: 10
По умолчанию

Ясно, а не можешь, код показать исправленный?
Ответить с цитированием
  #8  
Старый 13.04.2012, 17:40
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию



PHP код:
type
  PRGB32Array 
= ^TRGB32Array;
  
TRGB32Array packed array[0..MaxInt div SizeOf(TRGBQuad)-1of TRGBQuad;


procedure TForm1.Button1Click(SenderTObject);
var 
s0s1s2srPRGB32Array;
var 
x,y,K:integerctcolor;
begin
  Image1
.Picture.Bitmap.PixelFormat := pf32bit;
  
Image2.Picture.Bitmap.PixelFormat := pf32bit;

  
:= UpDown1.Position;

  
Image2.Picture.Bitmap.Canvas.FillRect(Image2.Picture.Bitmap.Canvas.ClipRect);

  for 
y:=1 to image1.height-do
  
begin
    s0 
:= Image1.Picture.Bitmap.ScanLine[y-1];
    
s1 := Image1.Picture.Bitmap.ScanLine[y];
    
s2 := Image1.Picture.Bitmap.ScanLine[y+1];
    
sr := Image2.Picture.Bitmap.ScanLine[y];
    for 
x:=1 to image1.width-do
    
begin

      sr
[x].rgbRed :=(((-1)*s2[x-1].rgbRed)+
                      ((-
1)*s2[x].rgbRed)+
                      ((-
1)*s2[x+1].rgbRed)+
                      ((-
1)*s1[x-1].rgbRed)+
                      ( (
8)*s1[x].rgbRed)+
                      ((-
1)*s1[x+1].rgbRed)+
                      ((-
1)*s0[x-1].rgbRed)+
                      ((-
1)*s0[x].rgbRed)+
                      ((-
1)*s0[x+1].rgbRed)) div K+128;

       
sr[x].rgbGreen := sr[x].rgbRed;
       
sr[x].rgbBlue := sr[x].rgbRed;   

     
end;
  
end;
end
Ответить с цитированием
  #9  
Старый 13.04.2012, 17:48
Sk1f Sk1f вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 5
Репутация: 10
По умолчанию

Да прибудет с тобой сила))))) Спасибо большое, ща разбираться буду. Очень помог. Если у тебя есть сайты, могу разместить ссылки на них на своих сайтах в честь благодарности))) Если что, в личку пиши...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter