houghlines.cpp

来自「OpenCV的各类例子」· C++ 代码 · 共 67 行

CPP
67
字号
/*  这是一个命令行程序,以图像作为文件输入变量   编译时选择“#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);    }}

⌨️ 快捷键说明

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