Delphi-OpenCV/samples/LibTest/cvSobel/cv_Sobel.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

102 lines
2.3 KiB
ObjectPascal

// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
// JCL_DEBUG_EXPERT_DELETEMAPFILE OFF
program cv_Sobel;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
{$I ..\..\uses_include.inc}
;
const
filename = 'Resource\cat2.jpg';
Var
xorder: Integer = 1;
xorder_max: Integer = 2;
yorder: Integer = 1;
yorder_max: Integer = 2;
// ôóíêöèÿ-îáðàáîò÷èê ïîëçóíêà -
// ïîðÿäîê ïðîèçâîäíîé ïî X
procedure myTrackbarXorder(pos: Integer); cdecl;
begin
xorder := pos;
end;
//
// ôóíêöèÿ-îáðàáîò÷èê ïîëçóíêà -
// ïîðÿäîê ïðîèçâîäíîé ïî Y
procedure myTrackbarYorder(pos: Integer); cdecl;
begin
yorder := pos;
end;
Var
image: pIplImage = nil;
dst: pIplImage = nil;
dst2: pIplImage = nil;
aperture: Integer = 3;
c: Integer;
begin
try
// ïîëó÷àåì êàðòèíêó
image := cvLoadImage(filename);
WriteLn(Format('[i] image: %s', [filename]));
// ñîçäà¸ì êàðòèíêè
dst := cvCreateImage(cvSize(image^.width, image^.height), IPL_DEPTH_16S, image^.nChannels);
dst2 := cvCreateImage(cvSize(image^.width, image^.height), image^.depth, image^.nChannels);
// îêíî äëÿ îòîáðàæåíèÿ êàðòèíêè
cvNamedWindow('original', CV_WINDOW_AUTOSIZE);
cvNamedWindow('sobel', CV_WINDOW_AUTOSIZE);
cvCreateTrackbar('xorder', 'original', @xorder, xorder_max, myTrackbarXorder);
cvCreateTrackbar('yorder', 'original', @yorder, yorder_max, myTrackbarYorder);
while True do
begin
// ïðîâåðÿåì, ÷òîáû ïîðÿäîê ïðîèçâîäíûõ ïî X è Y áûë îòëè÷åí îò 0
if (xorder = 0) and (yorder = 0) then
begin
WriteLn('[i] Error: bad params for cvSobel() !');
cvZero(dst2);
end
else
begin
// ïðèìåíÿåì îïåðàòîð Ñîáåëÿ
cvSobel(image, dst, xorder, yorder, aperture);
// ïðåîáðàçóåì èçîáðàæåíèå ê 8-áèòíîìó
cvConvertScale(dst, dst2);
end;
// ïîêàçûâàåì êàðòèíêó
cvShowImage('original', image);
cvShowImage('sobel', dst2);
c := cvWaitKey(33);
if (c = 27) then
// åñëè íàæàòà ESC - âûõîäèì
break;
end;
// îñâîáîæäàåì ðåñóðñû
cvReleaseImage(image);
cvReleaseImage(dst);
cvReleaseImage(dst2);
// óäàëÿåì îêíà
cvDestroyAllWindows;
except
on E: Exception do
WriteLn(E.ClassName, ': ', E.Message);
end;
end.