aihot  2017-05-31 23:30:53  OpenCV |   查看评论   

 检测直线:cvHoughLines,cvHoughLines2

 
检测圆:cvHoughCircles
 
检测矩形:OpenCV中没有对应的函数,下面有段代码可以检测矩形,是通过先找直线,然后找到直线平行与垂直的四根线。
 
检测直线代码:

 

  1. /* 这是一个独立的程序。 传递图像名称作为程序的第一个参数.

  2.    通过将“#if 1”更改为“#if 0”并返回,在标准和概率霍夫变换之间切换 */

  3. #include <cv.h>

  4. #include <highgui.h>

  5. #include <math.h>

  6.  

  7. int main(int argc, char** argv)

  8. {

  9.     const char* filename = argc >= 2 ? argv[1] : "pic1.png";

  10.     IplImage* src = cvLoadImage( filename, 0 );

  11.     IplImage* dst;

  12.     IplImage* color_dst;

  13.     CvMemStorage* storage = cvCreateMemStorage(0);

  14.     CvSeq* lines = 0;

  15.     int i;

  16.  

  17.     if( !src )

  18.         return -1;

  19.    

  20.     dst = cvCreateImage( cvGetSize(src), 8, 1 );

  21.     color_dst = cvCreateImage( cvGetSize(src), 8, 3 );

  22.    

  23.     cvCanny( src, dst, 50, 200, 3 );

  24.     cvCvtColor( dst, color_dst, CV_GRAY2BGR );

  25. #if 0

  26.     lines = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/180, 100, 0, 0 );

  27.  

  28.     for( i = 0; i < MIN(lines->total,100); i++ )

  29.     {

  30.         float* line = (float*)cvGetSeqElem(lines,i);

  31.         float rho = line[0];

  32.         float theta = line[1];

  33.         CvPoint pt1, pt2;

  34.         double a = cos(theta), b = sin(theta);

  35.         double x0 = a*rho, y0 = b*rho;

  36.         pt1.x = cvRound(x0 + 1000*(-b));

  37.         pt1.y = cvRound(y0 + 1000*(a));

  38.         pt2.x = cvRound(x0 - 1000*(-b));

  39.         pt2.y = cvRound(y0 - 1000*(a));

  40.         cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, CV_AA, 0 );

  41.     }

  42. #else

  43.     lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 50, 10 );

  44.     for( i = 0; i < lines->total; i++ )

  45.     {

  46.         CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);

  47.         cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );

  48.     }

  49. #endif

  50.     cvNamedWindow( "Source", 1 );

  51.     cvShowImage( "Source", src );

  52.  

  53.     cvNamedWindow( "Hough", 1 );

  54.     cvShowImage( "Hough", color_dst );

  55.  

  56.     cvWaitKey(0);

  57.  

  58.     return 0;

  59. }

 1/4    1 2 3 4 下一页 尾页
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自opencv检测直线、线段、圆、矩形

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]