opencv3/C++實現霍夫圓/直線檢測
阿新 • • 發佈:2020-01-07
霍夫直線檢測
引數說明:
cv::HoughLinesP( InputArray src,// 輸入影象(8位灰度影象) OutputArray lines,// 輸出直線兩點座標(vector<Vec4i>) double rho,// 生成極座標時候的畫素掃描步長 double theta,//生成極座標時候的角度步長(一般取CV_PI/180) int threshold,// 累加器閾值,獲得足夠交點的極座標點才被看成是直線 double minLineLength=0;// 直線最小長度 double maxLineGap=0;// 直線最大間隔 )
示例:
#include<iostream> #include<opencv2/opencv.hpp> using namespace cv; int main() { Mat src,dst; src = imread("E:/image/image/line.jpg"); if(src.empty()) { printf("can not load image \n"); return -1; } cvNamedWindow("input",CV_WINDOW_AUTOSIZE); imshow("input",src); dst = Mat::zeros(src.size(),src.type()); cvtColor(src,dst,CV_RGB2GRAY); Canny(dst,200); vector<Vec4i> plines; HoughLinesP(dst,plines,1,CV_PI/180,150,10,10); for(size_t i =0; i< plines.size(); i++) { Vec4i points = plines[i]; line(src,Point(points[0],points[1]),Point(points[2],points[3]),Scalar(0,255,255),3,CV_AA); } cvNamedWindow("output",CV_WINDOW_AUTOSIZE); imshow("output",src); waitKey(); return 0; }
霍夫圓檢測
霍夫圓檢測對噪聲比較敏感,一般要先對影象做中值濾波。
引數說明:
HoughCircles( InputArray image,// 輸入影象,必須是8位的單通道灰度影象 OutputArray circles,// 輸出結果,即圓資訊(圓心+半徑) Int method,// 採用方法:HOUGH_GRADIENT Double dp,// dp = 1; Double mindist,// 10 最短距離-可以分辨是兩個圓的,否則認為是同心圓:src_gray.rows/8 Double param1,// 用於Canny的邊緣閥值上限,下限被置為上限的一半 Double param2,// 中心點累加器閾值 Int minradius,// 最小半徑 Int maxradius//最大半徑 )
示例:
#include<iostream> #include<opencv2/opencv.hpp> using namespace cv; int main() { Mat src,src); cvtColor(src,src,CV_RGB2GRAY); dst = src.clone(); cvtColor(dst,CV_GRAY2RGB); //中值濾波 medianBlur(src,3); vector<Vec3f> circles; HoughCircles(src,circles,CV_HOUGH_GRADIENT,100,45,30,220); for(size_t i = 0; i < circles.size(); i++) { Vec3f c = circles[i]; circle(dst,Point(c[0],c[1]),c[2],CV_AA); } cvNamedWindow("output",dst); waitKey(); return 0; }
以上這篇opencv3/C++實現霍夫圓/直線檢測就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。