首先我選擇車牌號作為投影的,可以作為車牌切割的技術。
原理:車牌處理好後,用陣列儲存所有畫素值,然後在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...