霍夫直線檢測 opencv


  本次實驗是檢測圖像中的直線,用到了HoughLines()和HoughLinesP()函數,其中HoughLinesP()稱為累計概率霍夫變換,實驗結果顯示累計概率霍夫變換要比標准霍夫變換的效果好。具體的參數介紹書中網上都有,可參照此博客https://www.cnblogs.com/skyfsm/p/6881686.html 

 1 #include<opencv2/opencv.hpp>
 2 #include<opencv2/imgproc/imgproc.hpp>
 3 #include<iostream>
 4 using namespace cv;
 5 using namespace std;
 6 
 7 Mat midImage, dstImage;  // 臨時變量和目標圖的定義
 8 void HoughLines_p();   
 9 int main()
10 {
11       //載入原圖
12     Mat src = imread("D:/bei1.jpg");
13     namedWindow("原圖", CV_WINDOW_AUTOSIZE);
14     imshow("原圖", src);
15     //先進行邊緣檢測 在進行灰度變換
16     Canny(src, midImage, 50, 150, 3);
17     imwrite("D:/learn-opencv/can.jpg", midImage);
18     cvtColor(midImage, dstImage, CV_GRAY2BGR);
19 
20     //進行霍夫線變換
21     vector<Vec2f>lines;  //定義一個矢量結構lines用於存放得到的線段矢量集合
22     HoughLines(midImage, lines, 1, CV_PI / 180, 165, 0, 0);
23 
24     //依次在圖中做出每條線段
25     for (size_t i = 0; i < lines.size(); i++)
26     {
27         float r = lines[i][0];
28         float theta = lines[i][1];
29 
30         Point pt1, pt2;
31         double a = cos(theta), b = sin(theta);
32         double x0 = a * r, y0 = b * r;
33         pt1.x = cvRound(x0 + 1000 * (-b));
34         pt1.y = cvRound(y0 + 1000 * (a));
35         pt2.x = cvRound(x0 - 1000 * (-b));
36         pt2.y = cvRound(y0 - 1000 * (a));
37 
38         line(dstImage, pt1, pt2, Scalar(55, 100, 195), 1, LINE_AA);
39     }
40 
41     //HoughLines_p();累積概率【霍夫變換】
42     imshow("邊緣檢測后的圖", midImage);
43     imshow("顯示效果圖", dstImage);
44     imwrite("D:/learn-opencv/dstImage.jpg", dstImage);
45     waitKey(0);
46     return(0);
47     
48 }
49 
50 //累積概率【霍夫變換】
51 void HoughLines_p()
52 {
53     vector<Vec4i>lines;
54     HoughLinesP(midImage, lines, 1, CV_PI / 180, 80, 50, 10);
55 
56     for (size_t i = 0; i < lines.size(); i++)
57     {
58         Vec4i l = lines[i];
59         line(dstImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(186, 88, 255), 1, LINE_AA);
60     }
61 }

顯示效果:

1.原圖

2.canny邊緣檢測效果圖

3.標准霍夫變換圖

4.累計概率霍夫變換圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM