opencv檢測直線方法之投影法

2022-10-03 23:57:23 字數 1445 閱讀 6509

以下是我對投影法的一點認識和實驗:

投影法就是數字影象在某個方向上進行畫素累加。通過水平和垂直方向的投影,可以得到**影象投影的幾個特點:

(1)**區域的水平與豎直投影分布通常出現週期性的尖峰

(2)在文字投影的行與行之間或列與列之間常會出現明顯的空白區

因此,求影象水平以及豎直投影,根據特點分別設以閾值就可以將橫線以及豎直線所在位置確定。

第一步:求影象的水平投影、豎直投影

第二步:設定合理閾值,求取大於閾值的座標(水平投影記錄縱座標,垂直投影記錄橫座標)

第三步:根據記錄縱座標恢復水平線,根據記錄橫座標恢復豎直線。

下面附整體**以及實驗結果:

#include

#include

#include

#include

using namespace std;

using namespace cv;

mat verticalline(mat srcimagebin)//垂直線條檢測 }

}mat lineimage(srcimagebin.rows, srcimagebin.cowww.cppcns.comls, cv_8uc1, cv::scalar(0, 0, 0));

//尋找投影大於閾值0.3*srcimagebin.rows的橫座標

for (int i = 0; i < srcimagebin.cols; i++) }

} int count = array.size();

//恢復直線

for (int n = 0; n < srcimagebin.rows; n++)

} }

delete colswidth;

return lineimage;

}mat horizonline(mat srcimagebin)//水平線條檢測 }

} mat lineimage(srcimagebin.rows, srcimagebin.cols, cv_8uc1, cv::scalar(0, 0, 0));

//尋找投影大於閾值0.525*srcimagebin.cols的縱座標

for (int i = 0; i < srcimagebin.rows; i++)

} }int count = array1.size();

//恢復水平線

for (int h = 0; h(array1[h], m) == 255)

} }

delete rowswidth;//釋放前面申請的空間

return lineimage;

}int main()

實驗結果如下:

由上結果可知,如果直線中間有字會被誤檢為直線,圖中用紅色橢圓標出。

文中若有錯誤的不妥的地方,還望指出,以便共同學習。

本文標題: opencv檢測直線方法之投影法

本文位址:

opencv之霍夫變換直線檢測

霍夫變換之直線檢測 x cos x cos theta x cos y sin y sin theta y sin 2 x2 y2 2 x 2 y 2 2 x2 y2 tan y x x 0 tan theta y x x 0 tan y x x 0 檢測原理 兩點確定一條直線,通過一點可以確定無數...

Opencv之霍夫變化 直線 圓檢測

程式 include stdafx.h 本節講述 影象處理之 霍夫變化直線 include include include using namespace std using namespace cv mat src,dst,dst1,dst2,dst3,dst4,dst6,dst5,gray sr...

opencv 霍夫變換 直線檢測

用來做直線檢測 前提條件是邊緣檢測已經完成,一般用canny來做。cv houghlinesp inputarray src,輸入影象,必須8 bit的灰度影象 outputarray lines,輸出的極座標來表示直線 double rho,生成極座標時候的畫素掃瞄步長,一般是1 double t...