Delphi-OpenCV/samples/LibTest/cvFloodFill/cv_FloodFill.dpr
Laex 7fcbee712c Add samples
Multidemo
[+] fback_c (cvCalcOpticalFlowFarneback)
[+] minarea (cvMinEnclosingCircle, cvMinAreaRect2)

Signed-off-by: Laex <laex@bk.ru>
2013-04-06 00:58:24 +04:00

95 lines
2.5 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,
uLibName in '..\..\..\include\uLibName.pas',
highgui_c in '..\..\..\include\highgui\highgui_c.pas',
core_c in '..\..\..\include\ñore\core_c.pas',
Core.types_c in '..\..\..\include\ñore\Core.types_c.pas',
imgproc.types_c in '..\..\..\include\imgproc\imgproc.types_c.pas',
imgproc_c in '..\..\..\include\imgproc\imgproc_c.pas',
legacy in '..\..\..\include\legacy\legacy.pas',
calib3d in '..\..\..\include\calib3d\calib3d.pas',
imgproc in '..\..\..\include\imgproc\imgproc.pas',
haar in '..\..\..\include\objdetect\haar.pas',
objdetect in '..\..\..\include\objdetect\objdetect.pas',
tracking in '..\..\..\include\video\tracking.pas',
Core in '..\..\..\include\ñore\core.pas'
;
// çàëèâêà îáëàñòè êàðòèíêè öâåòîì
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.