OpenCV:霍夫變換HoughLines vs HoughCircles

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

OpenCV:霍夫變換HoughLines vs HoughCircles



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

OpenCV:霍夫變換HoughLines vs HoughCircles



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;

猜你喜歡