HoughLines()函式 畫直線在影象上
阿新 • • 發佈:2018-12-11
#include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; int main( ) { //【1】載入原始圖和Mat變數定義 Mat srcImage = imread("C://1.jpg"); //工程目錄下應該有一張名為1.jpg的素材圖 Mat midImage,dstImage;//臨時變數和目標圖的定義 //【2】進行邊緣檢測和轉化為灰度圖 Canny(srcImage, midImage, 50, 200, 3);//進行一此canny邊緣檢測 cvtColor(midImage,dstImage, CV_GRAY2BGR);//轉化邊緣檢測後的圖為灰度圖 //【3】進行霍夫線變換 vector<Vec2f> lines;//定義一個向量結構lines用於存放得到的線段向量集合 HoughLines(midImage, lines, 1, CV_PI/180, 150, 0, 0 ); //【4】依次在圖中繪製出每條線段 for( size_t i = 0; i < lines.size(); i++ ) { float rho = lines[i][0], theta = lines[i][1]; Point pt1, pt2; double a = cos(theta), b = sin(theta); double x0 = a*rho, y0 = b*rho; pt1.x = cvRound(x0 + 1000*(-b)); pt1.y = cvRound(y0 + 1000*(a)); pt2.x = cvRound(x0 - 1000*(-b)); pt2.y = cvRound(y0 - 1000*(a)); //此句程式碼的OpenCV2版為: //line( dstImage, pt1, pt2, Scalar(55,100,195), 1, CV_AA); //此句程式碼的OpenCV3版為: line( dstImage, pt1, pt2, Scalar(0,0,255), 1,CV_AA); } //【5】顯示原始圖 imshow("【原始圖】", srcImage); //【6】邊緣檢測後的圖 imshow("【邊緣檢測後的圖】", midImage); //【7】顯示效果圖 imshow("【效果圖】", dstImage); waitKey(0); return 0; }
程式碼如上 分別用兩張不同型別的照片進行測試,執行結果如下: 上圖可以看出了,只能檢測到直線型別的線條!下圖可見,可以檢測到直線線條!