Delphi-OpenCV/samples/LibDemo/cvErode_cvDilate/cvErode_cvDilate.dpr

100 lines
2.3 KiB
ObjectPascal
Raw Normal View History

program cvErode_cvDilate;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
ocv.highgui_c,
ocv.core_c,
ocv.core.types_c,
ocv.imgproc_c,
ocv.imgproc.types_c,
uResourcePaths;
const
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filename = cResourceMedia + 'opencv_logo_with_text.png';
var
image: PIplImage = Nil;
dst: PIplImage = Nil;
erode: PIplImage = Nil;
dilate: PIplImage = Nil;
radius: Integer = 1;
radius_max: Integer = 10;
iterations: Integer = 1;
iterations_max: Integer = 10;
Kern: pIplConvKernel;
c: Integer;
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -
// <20><><EFBFBD><EFBFBD><EFBFBD>c <20><><EFBFBD><EFBFBD>
procedure myTrackbarRadius(pos: Integer); cdecl;
begin
radius := pos;
end;
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -
// <20><>c<EFBFBD><63> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
procedure myTrackbarIterations(pos: Integer); cdecl;
begin
iterations := pos;
end;
begin
try
image := cvLoadImage(filename, 1);
Writeln('[i] image: ', filename);
if not Assigned(image) then
Halt;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dst := cvCloneImage(image);
erode := cvCloneImage(image);
dilate := cvCloneImage(image);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cvNamedWindow('original', CV_WINDOW_AUTOSIZE);
cvNamedWindow('erode', CV_WINDOW_AUTOSIZE);
cvNamedWindow('dilate', CV_WINDOW_AUTOSIZE);
cvCreateTrackbar('Radius', 'original', @radius, radius_max, myTrackbarRadius);
cvCreateTrackbar('Iterations', 'original', @iterations, iterations_max, myTrackbarIterations);
while True do
begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cvShowImage('original', image);
// c<><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Kern := cvCreateStructuringElementEx(radius * 2 + 1, radius * 2 + 1, radius, radius, CV_SHAPE_ELLIPSE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cvErode(image, erode, Kern, iterations);
cvDilate(image, dilate, Kern, iterations);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cvShowImage('erode', erode);
cvShowImage('dilate', dilate);
cvReleaseStructuringElement(Kern);
c := cvWaitKey(33);
if (c = 27) then
Break;
end;
// <20>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>c<EFBFBD><63>c<EFBFBD>
cvReleaseImage(image);
cvReleaseImage(dst);
cvReleaseImage(erode);
cvReleaseImage(dilate);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
cvDestroyWindow('original');
cvDestroyWindow('erode');
cvDestroyWindow('dilate');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.