Delphi-OpenCV/samples/LibTest/cvFloodFill/cv_FloodFill.dpr
Laex fde0aa2f53 Add samples
LibTest
[+] cv_CalcOpticalFlowPyrLK
[+] cv_SnakeImage
MultiDemo
[+] CameraShift
[+] Squares

Signed-off-by: Laex <laex@bk.ru>
2013-04-05 15:36:47 +04:00

83 lines
1.9 KiB
ObjectPascal

// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
// JCL_DEBUG_EXPERT_DELETEMAPFILE OFF
program cv_FloodFill;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
{$I ..\..\uses_include.inc}
;
// çàëèâêà îáëàñòè êàðòèíêè öâåòîì
procedure fill(src: pIplImage; seed: TCvPoint; color: TCvScalar); // = CV_RGB(255, 0, 0)
Var
comp: TCvConnectedComp;
begin
cvFloodFill(src, seed, color, cvScalarAll(10), // ìèíèìàëüíàÿ ðàçíîñòü
cvScalarAll(10), // ìàêñèìàëüíàÿ ðàçíîñòü
@comp, CV_FLOODFILL_FIXED_RANGE + 8, 0);
// ïîêàæåì ïëîùàäü çàëèâêè
WriteLn(Format('[filled area]%.2f', [comp.area]));
end;
// îáðàáîò÷èê ñîáûòèé îò ìûøêè
procedure myMouseCallback(event: Integer; x: Integer; y: Integer; flags: Integer; param: Pointer); cdecl;
Var
img: pIplImage;
begin
img := pIplImage(param);
case event of
CV_EVENT_MOUSEMOVE:
;
CV_EVENT_LBUTTONDOWN:
begin
WriteLn(Format('%dx%d', [x, y]));
// âûçûâàåì íàøó ôóíêöèþ-îá¸ðòêó âîêðóã cvFloodFill()
fill(img, CvPoint(x, y), CV_RGB(255, 0, 0));
end;
CV_EVENT_LBUTTONUP:
;
end;
end;
Const
filename = 'Resource\cat2.jpg';
Var
src: pIplImage = nil;
dst: pIplImage = nil;
c: Integer;
begin
try
// ïîëó÷àåì êàðòèíêó
src := cvLoadImage(filename);
WriteLn(Format('[i] image: %s', [filename]));
// ïîêàæåì èçîáðàæåíèå
cvNamedWindow('original', 1);
// âåøàåì îáðàáîò÷èê ìûøêè
cvSetMouseCallback('original', myMouseCallback, src);
while true do
begin
// ïîêàçûâàåì êàðòèíêó
cvShowImage('original', src);
c := cvWaitKey(33);
if (c = 27) then // åñëè íàæàòà ESC - âûõîäèì
break;
end;
// îñâîáîæäàåì ðåñóðñû
cvReleaseImage(src);
cvReleaseImage(dst);
// óäàëÿåì îêíà
cvDestroyAllWindows;
except
on E: Exception do
WriteLn(E.ClassName, ': ', E.Message);
end;
end.