原圖:
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include #include using namespace cv;
using namespace std;
vectorhorizontalprojectionmat(mat srcimg)//水平投影
} }mat horizontalprojectionmat(height, width, cv_8uc1);//建立畫布
for (int i = 0; i < height; i++) }
for (int i = 0; i < height; i++)//水平直方圖 }
vectorroilist;//用於儲存分割出來的每個字元
int startindex = 0;//記錄進入字元區的索引
int endindex = 0;//記錄進入空白區域的索引
bool inblock = false;//是否遍歷到了字元區內
for (int i = 0; i verticalprojectionmat(mat srcimg)//垂直投影
} }mat verticalprojectionmat(height, width, cv_8uc1);//垂直投影的畫布
for (int i = 0; i < height; i++) }
for (int i = 0; i < width; i++)//垂直投影直方圖 }
imshow("垂直投影", verticalprojectionmat);
cvwaitkey(0);
vectorroilist;//用於儲存分割出來的每個字元
int startindex = 0;//記錄進入字元區的索引
int endindex = 0;//記錄進入空白區域的索引
bool inblock = false;//是否遍歷到了字元區內
for (int i = 0; i < srcimg.cols; i++)//cols=width
else if (projectvalarry[i] == 0 && inblock)//進入空白區
}delete projectvalarry;
return roilist;
}int main(int argc, char* argv)
; vectorb = verticalprojectionmat(srcimg);//先進行垂直投影
//垂直投影以後的結果
for (int j = 0; j < b.size(); j++)
//for (int i = 0; i < b.size(); i++) }
/* vectora = horizontalprojectionmat(srcimg);
char szname[30] = ;
for (int i = 0; i < a.size(); i++)
{ vectorb = verticalprojectionmat(a[i]);
for (int j = 0; j
結果
如果只打算看結果的話,可以遮蔽掉垂直投影的輸出
垂直投影法分割驗證碼
字元分割的方法太簡單 哈哈,我是故意的,就是想試試看有沒有效果 神經網路也太落後,哪有三層就想搞定這種事情 基於學姐給的建議以及自己查閱資料以後的結論,我會嘗試用更多的演算法來對字元進行分割。分割字元最常用的方法就是 垂直投影法 連通域分析法。其中連通域分析法對於非粘連字元的分割有很好的效果,但是對...
利用投影法進行字元分割
目錄 字元分割有很多方法,但並不是每一種方法是萬能的,那麼就需要根據自己的需要來分析。例如 我現在專案的需求是將一串編號給切分開來。查了網上的資料和文獻,大致適合專案的有兩種方法 投影分割法和連通域分割法。當然還有其他的一些改進的演算法,今天就不作深入討論,以後研究了再分享。投影法的原理其實很簡單,...
opencv利用投影法進行水平切割和垂直切割
水平投影切割 include include using namespace std using namespace cv int main for y 0 yheight y vectorroilist 用於儲存分割出來的每個字元 int startindex 0 記錄進入字元區的索引 int e...