一、概述
案例:使用霍夫直線檢測簡單圖像中的直線
HoughLinesP( InputArray src, // 輸入圖像,必須8-bit的灰度圖像 OutputArray lines, // 輸出的極坐標來表示直線(用vector數組定義) double rho, // 生成極坐標時候的像素掃描步長(一般設置為1,也可根據實際情況嘗試) double theta, //生成極坐標時候的角度步長,一般取值CV_PI/180 int threshold, // 閾值,只有獲得足夠交點的極坐標點才被看成是直線(同一條直線上的坐標點再霍夫空間會相交與一點) double minLineLength=0;// 最小直線長度(可根據這個值檢測大直線和小直線) double maxLineGap=0;// 最大間隔(間隔多大的兩個像素點之間會被算做一個直線) )
二、代碼示例
Mat src = imread(filePath); if(src.empty()){ return; } imshow("src",src);//顯示原圖 Mat dst; cvtColor(src,dst,COLOR_BGR2GRAY);//轉換灰度圖 imshow("gray",dst); //邊緣檢測 Canny(dst,dst,50,100,3,true); imshow("canny",dst); //霍夫直線檢測 vector<Vec4f> plines; HoughLinesP(dst,plines,1,CV_PI/180,10,100,10); Mat matLine = Mat::zeros(src.size(),src.type()); for(int i=0;i<plines.size();i++){ Vec4f h = plines[i]; line(matLine,Point(h[0],h[1]),Point(h[2],h[3]),Scalar(0,0,255),3,LINE_AA); } imshow("lines",matLine);
三、演示圖片(紅色的直線為檢測到的直線)