• Open Source Computer Vision Library

Hough线段检测

Wikipedia,自由的百科全书

检测结果:

Image:Example-hough-source.png Image:Example-hough-result.png

  1. /* This is a standalone program. Pass an image name as a first parameter of the program.
  2. Switch between standard and probabilistic Hough transform by changing "#if 1" to "#if 0" and back */
  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. }
  60.  
Views
Personal tools