houghlines.cpp
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:2k
- /* 这是一个命令行程序,以图像作为文件输入变量
- 编译时选择“#if 1”或“#if 0”,可以使用标准和概率HOUGH变换两种方法 */
- #include <cv.h>
- #include <highgui.h>
- #include <math.h>
- int main(int argc, char** argv)
- {
- IplImage* src;
- if( argc == 2 && (src=cvLoadImage(argv[1], 0))!= 0)
- {
- IplImage* dst = cvCreateImage( cvGetSize(src), 8, 1 );
- IplImage* color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
- CvMemStorage* storage = cvCreateMemStorage(0);
- CvSeq* lines = 0;
- int i;
- cvCanny( src, dst, 50, 200, 3 );
- cvCvtColor( dst, color_dst, CV_GRAY2BGR );
- #if 1
- lines = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/180, 150, 0, 0 );
- for( i = 0; i < lines->total; i++ )
- {
- float* line = (float*)cvGetSeqElem(lines,i);
- float rho = line[0];
- float theta = line[1];
- CvPoint pt1, pt2;
- double a = cos(theta), b = sin(theta);
- if( fabs(a) < 0.001 )
- {
- pt1.x = pt2.x = cvRound(rho);
- pt1.y = 0;
- pt2.y = color_dst->height;
- }
- else if( fabs(b) < 0.001 )
- {
- pt1.y = pt2.y = cvRound(rho);
- pt1.x = 0;
- pt2.x = color_dst->width;
- }
- else
- {
- pt1.x = 0;
- pt1.y = cvRound(rho/b);
- pt2.x = cvRound(rho/a);
- pt2.y = 0;
- }
- cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, 8 );
- }
- #else
- lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 80, 30, 10 );
- for( i = 0; i < lines->total; i++ )
- {
- CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
- cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );
- }
- #endif
- cvNamedWindow( "Source", 1 );
- cvShowImage( "Source", src );
- cvNamedWindow( "Hough", 1 );
- cvShowImage( "Hough", color_dst );
- cvWaitKey(0);
- }
- }