Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2016, 17:22   #21
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Короче, у меня рабочий день кончился. Пока только это.


В принципе, можно сделать виртуальную сетку и получать квадратики, в которых хотя бы один пиксель отличается от фона (в зависимости от параметра bitblt()), чем мельче шаг сетки, тем больше точность. Можно и по-другому как-нибудь.
То что сделать чтоб работало быстро я и так знаю. Но КАК?
stlcrash вне форума Ответить с цитированием
Старый 15.03.2016, 17:46   #22
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Вот на входе у тебя 2 картинки W на Н пикселей.
Сформулируй чётко, что ты хочешь иметь на выходе?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.03.2016, 18:57   #23
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

TstringList с координатами всех областей размером F*F где есть изменения более чем в N пикселей. N и F задается пользователем.
stlcrash вне форума Ответить с цитированием
Старый 15.03.2016, 19:00   #24
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
TstringList с координатами всех областей
нафига именно стринг-лист? Чо там в строках хранить-то?
завтра, если не напрягут, попробую. ничо не обещаю, но напомни с утреца.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.03.2016, 19:13   #25
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
нафига именно стринг-лист? Чо там в строках хранить-то?
завтра, если не напрягут, попробую. ничо не обещаю, но напомни с утреца.
Потому что со стринг листа я смогу даже без исходников получать координаты в свою прогу
stlcrash вне форума Ответить с цитированием
Старый 15.03.2016, 19:33   #26
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Потому что со стринг листа я смогу даже без исходников получать координаты в свою прогу
Я всегда отдаю исходники. Причём бесплатно.
Они автоматически пришпиливаются в ЕХЕ и извлекаются оттудова обычно по Shift+F11. Это я не только тебе говорю.

Ты пока не трогай ничо, там ошибок полно. Рабочий день кончался, я спешил, вот и нахалтурил.
А щас - дай отдохнуть. Я так чудесно на диване валяюсь.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 15.03.2016 в 19:39.
min@y™ вне форума Ответить с цитированием
Старый 15.03.2016, 20:34   #27
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Окей. В стринг листе, потому что они потом пойдут прямиком в Memo где будут обработаны (пересортированы и частично удалены) и потом от туда отправятся в Com порт
stlcrash вне форума Ответить с цитированием
Старый 15.03.2016, 21:16   #28
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию


Странно но XOR работает лучше всего.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 16.03.2016, 00:36   #29
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

А не легче использовать OpenCV?
И уже с помощью него можно в режиме реального времени обрабатывать данные.
koljsch вне форума Ответить с цитированием
Старый 16.03.2016, 07:18   #30
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Осталась последняя часть задачи. Как разбить изображение на области размером 20*20 и проверить в них количество белых пикселей?

Получить координаты тех областей, в которых количество белых пикселей меньше заданного числа N.





Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type

 TRGBTriple=packed record
    b,g,r:Byte;
  end;
 
  TRGBTripleArray=array[0..4096] of TRGBTriple;
  pRGBTripleArray=^TRGBTripleArray;


  TForm1 = class(TForm)
    bGo: TButton;
    tmr1: TTimer;
    shp1: TShape;
    shp2: TShape;
    b1: TButton;
    img1: TImage;
    Timer1: TTimer;
    procedure bGoClick(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
    procedure b1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }

    procedure FindDiff();
    procedure MakeScreenshot(bmp: TBitmap);

  public
    { Public declarations }
    bmp1:TBitmap;
    bmp2:TBitmap;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Same(t1,t2:TRGBTriple):Boolean;
begin
  result := (t1.r=t2.r) and (t1.g=t2.g) and (t1.b=t2.b);
end;

procedure TForm1.bGoClick(Sender: TObject);
begin

Timer1.Enabled:=true;


end;

procedure TForm1.FindDiff;
var x,y:integer;
  p1,p2,p3:TRGBTriple;
  a1,a2,a3:PRGBTripleArray;
  res:TBitmap;
const
  w:TRGBTriple=(b:255;g:255;r:255);
begin
  res:=TBitmap.Create;
  res.PixelFormat := pf24bit;
  res.Width := bmp1.Width;
  res.height:=bmp1.height;
  for y:=0 to bmp1.Height-1 do
  begin
    a1:=PRGBTripleArray(bmp1.ScanLine[y]);
    a2:=PRGBTripleArray(bmp2.ScanLine[y]);
    a3:=PRGBTripleArray(res.ScanLine[y]);
    for x := 0 to bmp1.width-1 do
    begin
      p1:=a1[x];
      p2:=a2[x];
      if not same(p1,p2) then
        a3[x]:=p2
      else
        a3[x]:=w;
    end;
  end;
  img1.width:=res.Width;
  img1.Height:=res.Height;
  img1.Picture.Assign(res);
  res.Free;
 end;


procedure TForm1.MakeScreenshot(bmp: TBitmap);
var
  vDesktopDC: HDC;   // variable to store the device context handle of desktop window
begin
  // get the device context handle of current desktop window
  vDesktopDC := GetWindowDC(GetDesktopWindow);
  try
      // adjust the dimension and format of the supplied bitmap to match the screen
      bmp.PixelFormat := pf24bit;
      bmp.Height := Screen.Height;
      bmp.Width := Screen.Width;
 
      // draw the content of desktop into bmp
      BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, vDesktopDC, 0, 0, SRCCOPY);
  finally
    // mark that we have done with the desktop device context
    ReleaseDC(GetDesktopWindow, vDesktopDC);
  end;
end;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
 makeScreenshot(bmp2);
  shp1.Brush.Color := clGreen;
  shp2.Brush.Color := clGreen;
  update;
  tmr1.enabled:=false;
  FindDiff();
  shp1.Brush.Color := clWhite;
  shp2.Brush.Color := clWhite;
end;

procedure TForm1.b1Click(Sender: TObject);
begin
tmr1.enabled:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

  bmp1:=TBitmap.Create;
  bmp2:=TBitmap.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  bmp1.free;
  bmp2.free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  timer1.Enabled:=false;
  makeScreenshot(bmp1);
  shp1.Brush.Color := clGreen;
  shp2.Brush.Color := clWhite;
  update;
  tmr1.Enabled := true;
end;

end.
stlcrash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение изображений. C# Serg94 Помощь студентам 1 27.11.2012 19:43
Сравнение 2 изображений wlords Помощь студентам 0 23.11.2010 20:47
Сравнение изображений AmbaQ Общие вопросы Delphi 1 07.08.2010 19:20
Delphi - сравнение изображений battlefrogg Помощь студентам 7 17.07.2010 18:58
Сравнение изображений DeDoK Общие вопросы Delphi 1 11.10.2008 21:16