Delphi-OpenCV/2.4.3/samples/FloodFill/FloodFill.dpr
Laex 48dbfc5c3f Add samples:
+ FloodFill
+ Weighted
+ Weighted2
+ cvInRange
+ SplitMerge
+ cvAnd
+ CvtPixToPlane
+ cvCopyMakeBorder
+ LoadAndTransformImage

Signed-off-by: Laex <laex@bk.ru>
2013-01-02 01:36:38 +04:00

77 lines
1.9 KiB
ObjectPascal

program FloodFill;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
imgproc.types_c in '..\..\include\imgproc\imgproc.types_c.pas',
imgproc_c in '..\..\include\imgproc\imgproc_c.pas',
Core.types_c in '..\..\include\ñore\Core.types_c.pas',
core_c in '..\..\include\ñore\core_c.pas',
highgui_c in '..\..\include\highgui\highgui_c.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 = 'cat2.jpg';
Var
src: pIplImage = nil;
dst: pIplImage = nil;
c: Integer;
begin
// ïîëó÷àåì êàðòèíêó
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;
end.