緒:
若何檢測和識別圖像中的直線和圓?
一個很是有用的方式就是霍夫變換;
是圖像中識別各類幾何外形的根基算法之一;
【OpenCV:霍夫變換HoughLines vs HoughCircles】本文介紹一下opencv中的霍夫線變換和霍夫圓變換的應用 。

需要這些哦
OpenCV 2410
方式/
1霍夫線變換:
霍夫線變換是一種在圖像中尋找直線的方式;
OpenCV中撐持三種霍夫線變換, 別離為尺度霍夫線變換、多標準霍夫線變換、累計概率霍夫線變換 。
在OpenCV中可以挪用HoughLines來進行尺度霍夫線變換和多標準霍夫線變換;
挪用HoughLinesP函數進行累積概率霍夫線變換 。

2霍夫直線思惟:
我們都知道,
二維坐標軸上暗示一條直線的方程式y = a*x + b,
我們想求出一條直線就得想方設法求出此中的a和b的值 。
若是用極坐標來暗示就是:rho=xcos(theta)+ysin(theta);
此中,
theta就是直線與程度線所當作的角度,
而rho就是圓的半徑;
同樣地, 這兩個參數也是表征一條直線的主要參數,
確定他們倆了, 也就確定一條直線了 。
【注】:
OpenCV里, 只需挪用HoughLines就可獲得表征一條直線的這兩個參數值!
3霍夫直線檢測示例一:HoughLines
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("0.jpg");
imshow("srcImg", srcImage);
//邊緣檢測
Mat midImage, dstImage;
Canny(srcImage, midImage, 50, 200, 3);
cvtColor(midImage, dstImage, CV_GRAY2BGR);
//界說矢量布局存放檢測出來的直線
vector<Vec2f> lines;
HoughLines(midImage, lines, 1, CV_PI / 180, 150, 0, 0);
//第五個參數表閾值,閾值越年夜檢測越精準速度越快直線越少
//lines是包含rho和theta的, 而不包羅直線上的點,
//所以下面需要按照獲得的rho和theta來成立一條直線
//依次畫出每條線段
for (size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0]; //就是圓的半徑r
float theta = lines[i][1]; //就是直線的角度
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
猜你喜歡
- OpenCV:圖像縮放操作resize,pryUp,pryDown
- OpenCV:重映射remap vs仿射變換warpAffine
- OpenCV:區域生長法實現
- OpenCV:calcHist計算圖像直方圖
- OpenCV例程:針對對比度差的圖像,目標分割方法
- OpenCV:widthStep vs step
- OpenCV:TermCriteria迭代終止條件
- OpenCV:xml文件的讀取與寫入
- OpenCV:waitKey函數
- OpenCV:resize函數 VS vector:resize函數
