霍夫线变换

example
example
  1. 霍夫线变换是用于检测直线的变换。
  2. 为了应用变换,首先需要边缘检测预处理。


原理

  1. 两种坐标:
    1. 笛卡尔坐标系 —— 𝑦 = 𝑘𝑥 + 𝑞
    2. 霍夫空间 —— 𝑞 = −𝑥𝑘 + 𝑦
  2. 笛卡尔坐标系中一条直线,对应霍夫空间中的一个点
    hough space
  3. 笛卡尔坐标系中的一个点,对应霍夫空间中一条直线
    hough space
  4. 基于以上两点,如果给与几个点,它们换算成霍夫方程后如果存在共同的交叉点,则这几个点是共直线。


例子

#include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { Mat src = imread("Sudoku.jpg",0); imshow("src", src); Mat mid, dst; dst.create(src.size(),CV_8U); Canny(src, mid, 100, 100, 3); vector<Vec4i> lines; HoughLinesP(mid, lines, 1, CV_PI/180, 50, 50, 10); //画出每条线段 for (int i = 0; i<lines.size(); i++) { Vec4i line = lines[i]; line(dst, Point(line[0],line[1]), Point(line[2],line[3]), Scalar(255)); } imshow("mid", mid); imshow("dst", dst); waitKey(); return 0; }