houghlines.cpp
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:2k
源码类别:

OpenCV

开发平台:

Visual C++

  1. /*  这是一个命令行程序,以图像作为文件输入变量
  2.    编译时选择“#if 1”或“#if 0”,可以使用标准和概率HOUGH变换两种方法 */
  3. #include <cv.h>
  4. #include <highgui.h>
  5. #include <math.h>
  6. int main(int argc, char** argv)
  7. {
  8.     IplImage* src;
  9.     if( argc == 2 && (src=cvLoadImage(argv[1], 0))!= 0)
  10.     {
  11.         IplImage* dst = cvCreateImage( cvGetSize(src), 8, 1 );
  12.         IplImage* color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
  13.         CvMemStorage* storage = cvCreateMemStorage(0);
  14.         CvSeq* lines = 0;
  15.         int i;
  16.         cvCanny( src, dst, 50, 200, 3 );
  17.         cvCvtColor( dst, color_dst, CV_GRAY2BGR );
  18. #if 1
  19.         lines = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/180, 150, 0, 0 );
  20.         for( i = 0; i < lines->total; i++ )
  21.         {
  22.             float* line = (float*)cvGetSeqElem(lines,i);
  23.             float rho = line[0];
  24.             float theta = line[1];
  25.             CvPoint pt1, pt2;
  26.             double a = cos(theta), b = sin(theta);
  27.             if( fabs(a) < 0.001 )
  28.             {
  29.                 pt1.x = pt2.x = cvRound(rho);
  30.                 pt1.y = 0;
  31.                 pt2.y = color_dst->height;
  32.             }
  33.             else if( fabs(b) < 0.001 )
  34.             {
  35.                 pt1.y = pt2.y = cvRound(rho);
  36.                 pt1.x = 0;
  37.                 pt2.x = color_dst->width;
  38.             }
  39.             else
  40.             {
  41.                 pt1.x = 0;
  42.                 pt1.y = cvRound(rho/b);
  43.                 pt2.x = cvRound(rho/a);
  44.                 pt2.y = 0;
  45.             }
  46.             cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, 8 );
  47.         }
  48. #else
  49.         lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 80, 30, 10 );
  50.         for( i = 0; i < lines->total; i++ )
  51.         {
  52.             CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
  53.             cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );
  54.         }
  55. #endif
  56.         cvNamedWindow( "Source", 1 );
  57.         cvShowImage( "Source", src );
  58.         cvNamedWindow( "Hough", 1 );
  59.         cvShowImage( "Hough", color_dst );
  60.         cvWaitKey(0);
  61.     }
  62. }