opencv檢測圖像直線


  

 1 #include<opencv2/opencv.hpp>
 2 #include<iostream>
 3 using namespace std;
 4 using namespace cv;
 5 Mat src, dst;
 6 int main(void) {
 7     src = imread("..\\lineDetect.jpg");
 8     if (src.empty()) {
 9         cout << "Loading image failed!" << endl;
10         return -1;
11     }
12 
13     //圖片大小不合適,先對圖片進行縮放
14     resize(src, src, Size(src.rows/5, src.cols/5));
15     imshow("Sources image", src);
16     //圖片的方向不對,用仿射變換調整至正確位置
17     //圖片需要逆時針旋轉90度
18     double angel = 90;
19     Point center = Point(src.cols/2,src.rows/2);
20     //由於仿射變換后導致圖像不全,用下面方法解決
21     Rect mask = RotatedRect(center, Size(src.cols,src.rows), angel).boundingRect();
22     //對仿射中心進行調整
23     Mat h = getRotationMatrix2D(center, angel, 1);
24     h.at<double>(0, 2) += mask.width / 2 - center.x;
25     h.at<double>(1, 2) += mask.height / 2 - center.y;
26     //獲取仿射矩陣
27     Mat temp;
28     warpAffine(src, temp, h ,Size(src.rows,src.cols),1,0,Scalar(255,255,255));
29     copyTo(temp, dst, Mat());
30 
31     Mat gray;
32     cvtColor(temp, gray, COLOR_BGR2GRAY);
33     //反向二值化圖像
34     Mat binary;
35     threshold(gray, binary, 160,255, THRESH_BINARY_INV);
36     //通過開操作消除文字,保留直線
37     Mat kernel = getStructuringElement(MORPH_RECT, Size(20, 2));
38     morphologyEx(binary, binary, MORPH_OPEN, kernel);
39     //通過膨脹操作使直線更明顯
40     Mat kernel1 = getStructuringElement(MORPH_RECT, Size(3, 3));
41     dilate(binary, binary, kernel1);
42     //imshow("temp image",binary);
43     //霍夫直線檢測
44     vector<Vec4f> linesPoint;
45     HoughLinesP(binary, linesPoint, 1, CV_PI / 180, 20, 0, 0);
46     for (int i = 0; i < linesPoint.size(); i++){
47         line(dst, Point(linesPoint[i][0], linesPoint[i][1]), Point(linesPoint[i][2], linesPoint[i][3]), Scalar(0,255,0), 2);
48     }
49     imshow("Object image", dst);
50     waitKey(0);
51     return 0;
52 }

    結果:

   代碼中關於仿射變換,有不懂的可以去看看這篇博客:https://blog.csdn.net/u013105205/article/details/78826789

 


免責聲明!

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



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