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

📄 houghlines.dpr

📁 Delphi版本的OpenCV头文件库(以及诸多实例)
💻 DPR
字号:
program HoughLines;
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,grayimg ,edgeimg: pIplImage;
     box :  CvBox2D ;
     storage : pcvMemStorage;
     contours,Approx_contours : pCvSeq;
     res : integer;
     cS : cvSize ;
     i,j : integer;
     levels : integer = 3;
     rect :cvRect;
     pt : array [0..3] of  CvPoint2D32f;
     lines : pCvSeq;
     p1,p2 : cvPoint;

procedure drawLines();
var line : PFloat;
    rho,theta : float;
     pt1,pt2 : CvPoint;
     a,b  :double;
begin
  for i:=0 to lines.total-1 do
  begin
      line := pFloat(cvGetSeqElem( lines, i));
      rho := line^; inc(line);
      theta := line^;
      a := cos(theta) ; b := sin(theta);
      if ( abs(a)<0.001 ) then
      begin
        if (pt2.x = cvRound(rho)) then    pt1.x := 1
        else pt1.x := 0;
        pt1.y := 0;
        pt2.y := imgA.Height;
      end
      else if( abs(b) < 0.001 ) then
      begin
        if (pt2.y = cvRound(rho)) then    pt1.y := 1
        else pt1.y := 0;

        pt1.x := 0;
        pt2.x := imgA.width;
      end
      else begin
        pt1.x := 0;
        pt1.y := cvRound(rho/b);
        pt2.x := cvRound(rho/a);
        pt2.y := 0;
      end;
      cvLine( imgA, pt1, pt2, CV_RGB(255,0,0), 1, 8);
  end;
end;

var dx,dy : integer;
    white  , black : CvScalar;
    angle : double;
    edgeX : pIplImage;
    aLine : pCvPoint;
begin
//--- Cargo una imagen
    imgA := cvLoadImage( 'image_sample4.jpg', -1);
    edgeX := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1 );
    storage := cvCreateMemStorage(0);
    grayimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
    cvZero( grayimg );
    edgeimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
    cvZero( edgeimg );
 //   cvSobel( imgA, edgeX, 1, 0, 3);
   //cvLaplace( imgA, edgeX, 3);

    cvCvtColor(    imgA, grayimg, CV_BGR2GRAY);
    cvCanny(    grayimg, edgeimg, 50, 200, 3 );
    cvCvtColor( edgeimg,    imgA, CV_GRAY2BGR);
//--- Prueba 1
  //  lines := cvHoughLines2( edgeimg, storage, CV_HOUGH_STANDARD, 1, PI/180, 70, 0, 0);
//    drawLines();
//--- Prueba 2
    lines := cvHoughLines2( edgeimg, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 30, 5, 5);

    cvCvtColor( edgeimg,    imgA, CV_GRAY2BGR);
    for  i:=0 to lines.total-1 do
    begin
      aline := PCvPoint(cvGetSeqElem( lines, i));
      p1 := pcvPoint(aLine)^; inc( aLine);
      p2 := pcvPoint(aLine)^;
      cvLine( imgA,p1,p2, CV_RGB(255,0,0), 1, 8);
    END;

    cvNamedWindow( 'image', 1 );
    cvShowImage( 'image', imgA );

    cvWaitKey(0);

{    grayimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
    cvZero( grayimg );
    edgeimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
    cvZero( grayimg );
    storage := cvCreateMemStorage( 0);
  IplImage *edgeX = cvCreateImage( cvGetSize(imgA), IPL_DEPTH_16S, 1 );
 //   cvCvtColor(    imgA, grayimg, CV_BGR2GRAY);
    //cvCanny(    grayimg, edgeimg, 50, 200, 3 );
    cvSobel( imgA, edgeimg, 1, 0, 3);
    cvCvtColor( edgeimg,    imgA, CV_GRAY2BGR);
    cvNamedWindow( 'image', 1 );
    cvShowImage( 'image', grayimg );
    cvWaitKey(0);        }
end.



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -