利用投影法基於Opencv的文字定位

2021-08-15 16:05:30 字數 1514 閱讀 4246

針對發票識別之類的自然環境中文字識別,對結果影響最大的應該是文字定位的問題。

下面本人參考 boytnt 的基於opencv進行文字分塊切割(c#)

本人寫了乙份c++的** 僅供參考

因為有一些干擾,所以文字定位並不是很完美,可以通過二值化的方法去掉一些干擾,以後再改進。

**

#include 

#include

#include

using

namespace cv;

using

namespace

std;

vector

getrowrects(mat gray)

}bool inline = false;

int start = 0;

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

else

if ((i - start > 5) && projection[i] < 10 && inline)}}

delete projection;

return rows;

}vector

getblockrects(mat gray, int rowy)

}bool inblock = false;

int start = 0;

//開始根據投影值識別分割點

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

else

if ((i - start > 10) && inblock && projection[i] < 2)

else

}else}}

return blocks;

}int main(int argc, char* argv)

mat gray, data;

cvtcolor(image, gray, cv_bgr2gray);

data = image.clone();

int blocksize = 25;

int constvalue = 10;

//threshold(gray, gray, 0, 255, thresh_binary_inv | cv_thresh_otsu);

adaptivethreshold(gray, gray, 255, cv_adaptive_thresh_mean_c, cv_thresh_binary_inv, blocksize, constvalue);

imshow("1", gray);

vector

rows = getrowrects(gray);

cout

<< rows.size();

vector

items;

for each(cvrect row in rows)

for each (cvrect rect in items)

imshow("result", image);

waitkey(0);

}

opencv利用投影法進行水平切割和垂直切割

水平投影切割 include include using namespace std using namespace cv int main for y 0 yheight y vectorroilist 用於儲存分割出來的每個字元 int startindex 0 記錄進入字元區的索引 int e...

基於OpenCV的任意方向投影

目前在opencv中,有reduce函式可以進行水平或者垂直方向的投影。c voidreduce inputarraymtx,outputarrayvec,intdim,intreduceop,intdtype 1 parameters reduction operation that could ...

利用投影法進行字元分割

目錄 字元分割有很多方法,但並不是每一種方法是萬能的,那麼就需要根據自己的需要來分析。例如 我現在專案的需求是將一串編號給切分開來。查了網上的資料和文獻,大致適合專案的有兩種方法 投影分割法和連通域分割法。當然還有其他的一些改進的演算法,今天就不作深入討論,以後研究了再分享。投影法的原理其實很簡單,...