📄 contour.dpr
字号:
program Contour;
uses
Forms,
cvCAm in '..\OpenCV\cvCAm.pas',
highGui in '..\OpenCV\highGui.pas',
IPL in '..\OpenCV\Ipl.pas',
OpenCV in '..\OpenCV\OpenCV.pas';
{$R *.res}
const w = 500 ;
var imgA,imgB,img : pIplImage;
storage : pcvMemStorage;
contours,Approx_contours : pCvSeq;
res : integer;
cS : cvSize ;
i,j : integer;
levels : integer = 3;
procedure on_trackbar( pos:integer);
var cnt_img : pIplImage;
_contours : pCvSeq;
_levels : integeR;
begin
cnt_img := cvCreateImage( cvSize_(w,w), 8, 3 );
_contours := contours;
_levels := levels - 3;
if( _levels <= 0 )then // get to the nearest face to make it look more funny
_contours := _contours.h_next.h_next.h_next;
cvZero( cnt_img );
cvDrawContours( cnt_img, _contours, CV_RGB(255,0,0), CV_RGB(0,255,0), _levels, 3, CV_AA, cvPoint_(0,0) );
cvShowImage( 'contours', cnt_img );
cvReleaseImage( cnt_img );
end;
var dx,dy : integer;
white , black : CvScalar;
angle : double;
begin
storage := cvCreateMemStorage(0);
img := cvCreateImage( cvSize_(w,w), 8, 1 );
cvZero( img );
for i:=0 to 5 do
begin
dx := (i mod 2)*250 - 30;
dy := (i div 2)*150;
white := cvScalar_(255,255,255,255);
black := cvScalar_(0,0,0,0);
cvEllipse( img, cvPoint_(dx+150, dy+100), cvSize_(100,70), 0, 0, 360, white, -1, 8, 0 );
if( i = 0 ) then
for j := 0 to 10 do
begin
angle := (j+5)* PI/21;
cvLine(img, cvPoint_(cvRound(dx+100+j*10-80*cos(angle)),
cvRound(dy+100-90*sin(angle))),
cvPoint_(cvRound(dx+100+j*10-30*cos(angle)),
cvRound(dy+100-30*sin(angle))), white, 1, 8, 0);
end;
//}
cvEllipse( img, cvPoint_(dx+150, dy+100), cvSize_(100,70), 0, 0, 360, white, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+115, dy+70), cvSize_(30,20), 0, 0, 360, black, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+185, dy+70), cvSize_(30,20), 0, 0, 360, black, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+115, dy+70), cvSize_(15,15), 0, 0, 360, white, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+185, dy+70), cvSize_(15,15), 0, 0, 360, white, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+115, dy+70), cvSize_(5,5), 0, 0, 360, black, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+185, dy+70), cvSize_(5,5), 0, 0, 360, black, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+150, dy+100), cvSize_(10,5), 0, 0, 360, black, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+150, dy+150), cvSize_(40,10), 0, 0, 360, black, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+27, dy+100), cvSize_(20,35), 0, 0, 360, white, -1, 8, 0 );
cvEllipse( img, cvPoint_(dx+273, dy+100), cvSize_(20,35), 0, 0, 360, white, -1, 8, 0 );
end;
cvNamedWindow( 'image', 1 );
cvShowImage( 'image', img );
cvFindContours( img, storage, @contours, sizeof(CvContour),
CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint_(0,0) );
on_trackbar(0);
// comment this out if you do not want approximation
{ contours = cvApproxPoly( contours, sizeof(CvContour), storage, CV_POLY_APPROX_DP, 3, 1 ); }
cvNamedWindow( 'contours', 1 );
cvCreateTrackbar( 'levels+3', 'contours', @levels, 7, on_trackbar );
on_trackbar(4);
cvWaitKey(0);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -