車牌識別之字元切割2

2021-08-14 16:52:35 字數 1957 閱讀 5388

首先我選擇車牌號作為投影的,可以作為車牌切割的技術。

原理:車牌處理好後,用陣列儲存所有畫素值,然後在x軸上遍歷每一列的畫素值並累加,最總所投影的效果將以投影圖的形式呈現,投影圖的波峰波谷的差距就是每列累加的畫素值的差距。

如果把這項技術作為車牌字元切割的技術,那麼每列畫素的累加值就是用來判斷字元區與空白區的依據。

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/highgui/highgui.hpp"

#include

using

namespace cv;

using

namespace

std;

vector

verticalprojectionmat(mat image)//垂直投影 }}

mat verticalprojectionmat(height, width, cv_8u, scalar(255));//垂直投影的畫布

for (int i = 0; i < height; i++)

}for (int i = 0; i < width; i++)//垂直投影直方圖

}imshow("垂直投影", verticalprojectionmat);//以上是如何讓這個畫布形成的呢

rect rect(0, 0, 356, 90);

mat image_cut = mat(verticalprojectionmat, rect);

mat image_copy = image_cut.clone();

imshow("切割", image_copy);

vector

roilist;//用於儲存分割出來的每個字元

int startindex = 0;//記錄進入字元區的索引

int endindex = 0;//記錄進入空白區域的索引

bool inblock = false;//是否遍歷到了字元區內

for (int i = 0; i < image.cols; i++)//cols=width

else

if (projectvalarry[i] == 0 && inblock)//進入空白區

}delete projectvalarry;

return roilist;

}int main()

; vector

b = verticalprojectionmat(image3);//先進行垂直投影 ,並切割

/*for (int j = 0; j waitkey(0);

return

0;}

(一)效果圖

1、原始高度是118,切割高度是102

2、切割高度是90

3、上面所展現的切割就是理想中要達到的波谷,作為字元切割的分界區,但是光憑這張切割並不可行,但是以下所講的可達到與此同等的目的。

改變紅框中的臨界條件就可以定義理想的波谷

當臨界條件是每列的畫素累加值為18時,效果圖如下

(三)總結

通過垂直投影進行字元切割的要點是尋找字元間隔的準確波谷,本次實驗中帶部首的漢字由於漢字中間出現較低波谷切割不準確。這種方法中如果字元間隔的波谷不具有一致性,或者車牌影象前期處理不夠細緻也很難切割準確。

車牌識別之字元切割3

原理 垂直投影。限制切割出來的字元寬度要大於車牌總寬度的七分之一。該篇部落格無法對漢字進行完整切割,本次進行改善,可把車牌進行完整的字元切割。include opencv2 imgproc imgproc.hpp include opencv2 highgui highgui.hpp include...

基於OpenCV的車牌識別 2 車牌字元識別

3 車牌字元切割 a.閾值濾波,使用cv thresh binary引數通過把白色值變為黑色,黑色值變為白色來實現閾值輸出的反轉,因為需要獲取字元的輪廓,而輪廓的演算法尋找的是白色畫素 b.查詢輪廓 c.驗證輪廓是否為字元,去除那些規格太小的或者寬高比不正確的區域。字元是45 77的寬高比,允許0....

TensorFlow車牌識別實踐(2)

按照說明的用法,執行過程分以下4步 1 準備10萬個背景 2 合成1000個測試車牌影象 3 訓練,以取得權重引數 4 車牌檢測 注意 執行時可能會報錯 cv2.cv load image grayscale不存在。此時要將其改為cv2.imread grayscale。python安裝 pillo...