⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contour.dpr

📁 Delphi版本的OpenCV头文件库(以及诸多实例)
💻 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 + -