opencv 霍夫变换检测直线 例程中的1000

来源:互联网 发布:vs2015打开数据库 编辑:程序博客网 时间:2024/05/22 00:41

opencv 霍夫变换检测直线中的“1000”
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>using namespace cv;using namespace std;void help(){ cout << "\nThis program demonstrates line finding with the Hough transform.\n"         "Usage:\n"         "./houghlines <image_name>, Default is pic1.jpg\n" << endl;}int main(int argc, char** argv){ const char* filename = argc >= 2 ? argv[1] : "pic1.jpg"; Mat src = imread(filename, 0); if(src.empty()) {     help();     cout << "can not open " << filename << endl;     return -1; } Mat dst, cdst; Canny(src, dst, 50, 200, 3); cvtColor(dst, cdst, CV_GRAY2BGR); #if 0  vector<Vec2f> lines;  HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );  for( size_t i = 0; i < lines.size(); i++ )  {     float rho = lines[i][0], theta = lines[i][1];     Point pt1, pt2;     double a = cos(theta), b = sin(theta);     double x0 = a*rho, y0 = b*rho;     pt1.x = cvRound(x0 + 1000*(-b));     pt1.y = cvRound(y0 + 1000*(a));     pt2.x = cvRound(x0 - 1000*(-b));     pt2.y = cvRound(y0 - 1000*(a));     line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);  } #else  vector<Vec4i> lines;  HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );  for( size_t i = 0; i < lines.size(); i++ )  {    Vec4i l = lines[i];    line( cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);  } #endif imshow("source", src); imshow("detected lines", cdst); waitKey(); return 0;}

图片来自:CSDN 【fdl19881]

一副图胜万语千言!!!

其实就是标准霍夫变换检测返回是

lines: 储存着检测到的直线的参数对 (r,\theta) 的容器 

要明确表示最好是画出比较长的线段这里的1000只是个设定值