Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

А вы не могли бы мне подсказать как сравнить по пикселам два ч/б   Найти похожие ветки 

 
DoktorX   (2006-11-14 23:13) [0]

А вы не могли бы мне подсказать как сравнить по пикселам два ч/б битмапа
рамерностью 30Х30 пикселов?


 
Джо ©   (2006-11-14 23:13) [1]

Думаю, могли бы. А в чем загвоздка?


 
DoktorX   (2006-11-14 23:15) [2]

Я чото сделал но оно не работает!

procedure TForm1.Button3Click(Sender: TObject);

var
Count,x,y,i,Result,chislo:integer;

bm:TBitmap;
begin
 for i:=0 to 5 do
 begin
bm:=TBitmap.Create;
ImageList1.GetBitmap(i,bm);
Image4.Picture.Bitmap:=bm;
Count := 0;
for x := 0 to Width-1 do
for y := 0 to Height-1 do
 if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.Pixels[x,y] = clblack)
 then Inc(Count);
Result:=(Count div 10);
if (Result >20)
then
chislo:= i;
label4.Caption:= inttostr(chislo);
end;
bm.Free;
end;


 
Johnmen ©   (2006-11-14 23:16) [3]

ImageX.Canvas.Pixels[X,Y] <> ImageY.Canvas.Pixels[X,Y]

Это последний раз. Учи матчасть.


 
Johnmen ©   (2006-11-14 23:17) [4]


> но оно не работает!


С чего ты взял?


 
DoktorX   (2006-11-14 23:18) [5]

а как с imagelist перебрать бм и сравнить?


 
MikePetrichenko ©   (2006-11-14 23:20) [6]


> Я чото сделал но оно не работает!

Сначала определись ЧТО сделал.


 
Johnmen ©   (2006-11-14 23:23) [7]


> а как с imagelist перебрать бм и сравнить?


Здесь дело такое, что на вопросы типа "дайте сырцов" отвечать не принято.


 
Anatoly Podgoretsky ©   (2006-11-14 23:24) [8]


> С чего ты взял?

По вопросу работает, а по приведеным им коду не работает, поскольку вопрос к коду отношения не имеет, в коде он считает количество совпадающих черных точек


 
DoktorX   (2006-11-14 23:28) [9]

так мне и надо по кол совпавших чёрных точек отобразить наилучший шаблон


 
Anatoly Podgoretsky ©   (2006-11-14 23:29) [10]

> DoktorX  (14.11.2006 23:28:09)  [9]

А теперь внимательно прочитай вопрос, и подумай о наших телепатических способностях


 
Johnmen ©   (2006-11-14 23:34) [11]

Кстати, в [2] ещё и утечки будут. Т.к. Free не там.


 
Ketmar ©   (2006-11-14 23:43) [12]

опять он...


 
DoktorX   (2006-11-14 23:56) [13]

Удалено модератором


 
DoktorX   (2006-11-15 00:09) [14]

вы мне не отказываетесь помочь? какие же вы спецы??????


 
Anatoly Podgoretsky ©   (2006-11-15 00:13) [15]

Напрашиваешься, а у нас в этом случае не церемонятся.


 
Johnmen ©   (2006-11-15 00:14) [16]


> вы мне не отказываетесь помочь? какие же вы спецы??????


Как можно помочь, если ты не отвечаешь на уточняющие вопросы?
А спецы мы самые спецовые из всех спецов.


 
DoktorX   (2006-11-15 00:16) [17]

задайте мне вопрос


 
Johnmen ©   (2006-11-15 00:18) [18]


> задайте мне вопрос


Пожалуйста - [4]


 
Anatoly Podgoretsky ©   (2006-11-15 00:18) [19]

> DoktorX  (15.11.2006 0:16:17)  [17]

Может тебе и пальцы загибать


 
DoktorX   (2006-11-15 00:19) [20]

(Image4.Canvas.Pixels[x,y] = clblack)
а если вместо етого поставить
(bm[i].Canvas.Pixels[x,y] = clblack)


 
MikePetrichenko ©   (2006-11-15 00:22) [21]


> Может тебе и пальцы загибать

Агаа!


 
Anatoly Podgoretsky ©   (2006-11-15 00:27) [22]

> MikePetrichenko  (15.11.2006 0:22:21)  [21]

Приятно встретить знающего человека


 
RASkov   (2006-11-15 03:54) [23]

> for x := 0 to Width-1 do
> for y := 0 to Height-1 do

У тебя здесь все верно? точно?
Вставь перед ними:
ShowMessage(IntToStr(Width)+" - "+IntToStr(Image4.Picture.Bitmap.Width));

>Image4.Picture.Bitmap:=bm;
Лучше так Image4.Picture.Bitmap.Assign(bm);


 
RASkov   (2006-11-15 04:11) [24]

А по твоему приведенному "куску кода" можно и так сделать
ImageList1.GetBitmap(i, Image4.Picture.Bitmap);
А то у тебя i раз создается bm, а уничтожается один раз. Т.е. bm тебе вообще не надо.
Или один раз создай bm до циклов и нафик не нужен Image4. После циклов finally bm.Free;


 
Johnmen ©   (2006-11-15 09:55) [25]


> RASkov   (15.11.06 04:11) [24]


Не стОит давать бредовые советы и вводить людей в заблуждение.


 
RASkov   (2006-11-15 12:37) [26]

> [25] Johnmen ©   (15.11.06 09:55)
>и вводить людей в заблуждение.

Так на оборот же хочу чела вывести из него. В чем бред? У него идет перебор всех картинок из ImigaList и далее приравнивание к Image4 который в свою очередь попиксельно сравнивается с Image3. Т.е. здесь получается промежуточный Image4 и ненужен вовсе.


 
RASkov   (2006-11-15 12:38) [27]

или не нужен временный битмап


 
RASkov   (2006-11-15 13:17) [28]

> Автор, попробуй так и сделай выводы, я просто чуть-чуть подправил твой код, на самом деле здесь много чего переделать можно.
procedure TForm1.Button3Click(Sender: TObject);
var
Count, x, y, i, Result, chislo: Integer;
begin
chislo:= -1;
for i:=0 to ImageList1.Count-1 do begin
 ImageList1.GetBitmap(i, Image4.Picture.Bitmap);
 Count := 0;
 for x := 0 to Image4.Picture.Bitmap.Width-1 do
  for y := 0 to Image4.Picture.Bitmap.Height-1 do begin
   if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.Pixels[x,y] = clblack)
    then Inc(Count);
   Result:=(Count div 10);
   if (Result > 20) then chislo:= i;
  end;
* Image4.Repaint;
 Label4.Caption:= inttostr(chislo);
* Application.ProcessMessages;
end;
end;


* - можно убрать. (быстрее будет)
ЗЫ chislo всегда будет нарастающим(я думаю смысл понятен) Вместо временного битмапа лучше временно хранить Result максимальный.



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.079 c
2-1163360378
pavels777
2006-11-12 22:39
2006.12.03
Распознование Текста с сканера!


2-1163634950
Wadim
2006-11-16 02:55
2006.12.03
Тут был вопрос по поводу как словить клавиши в винде. А если..


15-1163258853
тайный агент
2006-11-11 18:27
2006.12.03
Попасть на другой комп


15-1163474121
Slider007
2006-11-14 06:15
2006.12.03
С днем рождения ! 14 ноября


2-1163623690
framez
2006-11-15 23:48
2006.12.03
вопрос по БД: IB6.5 + BDE