opencv判斷直線和多邊形的交點_OpenCV學習筆記(八)之霍夫直線變換
阿新 • • 發佈:2021-01-02
技術標籤:opencv判斷直線和多邊形的交點
一. 霍線變換介紹
- Hough Line Transform用來做直線檢測
- 前提條件--邊緣檢測已經完成
- 平面空間到極座標空間轉換
在影象平面空間上的多個點對映到(r-θ)座標空間中,形成多條曲線。多條曲線有共同的交點,即表明這幾個點在影象平面空間中是共線的。
![7ad84b73804cd73ee92c6f62185758fd.png](https://img.796t.com/res/2021/01-02/02/78d084397a063678bb5dafb371ec17cb.png)
標準的霍夫變換cv::HoughLines從平面座標轉換到霍夫空間,最終輸出是(θ, r)表示極座標空間。
霍夫變換直線概率cv::HoughLinesP最終輸出是直線的兩個點(x0, y0, x1, y1)。
二. 霍夫變換API介紹
1. cv::HoughLines
cv::HoughLines( InputArray src, //輸入影象,必須是8-bit的灰度影象 OutputArray lines, //輸出的極座標表示直線 double rho, //生成極座標的畫素掃描步長 double theta, //生成極座標的角度步長 int threshold, //閾值,只有獲得足夠交點的極座標點才能看成是直線 double srn = 0, //是否應用多遲鈍霍夫變換,如果不是設定0表示經典霍夫變換 double stn = 0, //是否應用多遲鈍霍夫變換,如果不是設定0表示經典霍夫變換 double min_theta = 0, //表示角度掃描範圍0-180之間 double max_theta = CV_PI )
2. cv::HoughLineP
cv::HoughLinesP( InputArray src, //輸入影象,必須是8-bit的灰度影象 OutputArray lines, //輸出的極座標表示直線 double rho, //生成極座標的畫素掃描步長 double theta, //生成極座標的角度步長 int threshold, //閾值,只有獲得足夠交點的極座標點才能看成是直線 double minLineLength=0, //最小直線長度 double maxLineGap=0 //最大間隔 )
三. 霍夫變換應用程式碼:
/*****霍夫變換*****/
#include<iostream>
#include<opencv2/opencv.hpp>
#include<string>
#include<vector>
using namespace std;
string in_title = "input image";
string ou_title = "output image";
int main() {
cv::Mat src, dst,gray_src;
src = cv::imread("1.jpg");
cv::namedWindow(in_title, cv::WINDOW_NORMAL);
cv::imshow(in_title, src);
//先提取邊緣
cv::Canny(src, gray_src, 150, 200);
cv::namedWindow("edge image", cv::WINDOW_NORMAL);
cv::imshow("edge image", gray_src);
//儲存霍夫變換後的直線點座標,兩對
vector<cv::Vec4f> plines;
cv::HoughLinesP(gray_src, plines, 1, CV_PI / 180.0, 10, 0, 10);
//定義顏色
cv::Scalar color = cv::Scalar(0, 0, 255);
//畫出直線
cv::cvtColor(gray_src, dst, cv::COLOR_GRAY2BGR);
for (size_t i = 0; i < plines.size(); ++i) {
cv::Vec4f hline = plines[i];
cv::line(dst, cv::Point(hline[0], hline[1]), cv::Point(hline[2], hline[3]),
color, 3, cv::LINE_AA);
}
cv::namedWindow(ou_title, cv::WINDOW_NORMAL);
cv::imshow(ou_title, dst);
cv::waitKey(0);
return 0;
}
點進來,關注我 開發小鴿 看更多CV,深度學習,程式設計學習筆記,更有海量原始碼等你來拿!!!
讓我們一起學習,一起進步!!!
OpenCV學習筆記zhuanlan.zhihu.com![d78d227c180a89364a89860fd5ab88dd.png](https://img.796t.com/res/2020/12-15/01/df9de1c142ff7c5fe826cde70821d7a2.png)
![d78d227c180a89364a89860fd5ab88dd.png](https://img.796t.com/res/2020/12-15/01/df9de1c142ff7c5fe826cde70821d7a2.png)
![d78d227c180a89364a89860fd5ab88dd.png](https://img.796t.com/res/2020/12-15/01/df9de1c142ff7c5fe826cde70821d7a2.png)
![d78d227c180a89364a89860fd5ab88dd.png](https://img.796t.com/res/2020/12-15/01/df9de1c142ff7c5fe826cde70821d7a2.png)