驗證碼破解技術四部曲之使用Tesseract(二)

代碼下載

本節的代碼能夠經過此處進行下載。git

圖像直方圖

首先看驗證碼的樣子,

test1test2test3

github

能夠看到這幾個驗證碼最大的特色就是字母比較深,而周圍的背景很淺,把圖像轉換成黑白顏色,能夠顯示的更加的明顯。
spa

//按黑白讀取圖像
Mat mat = imread("test1.jpg", 0);
cv::imshow("initial_mat", mat);
cv::waitKey(0);

test1_gray

能夠看到全部背景的灰度值,都會小於字母的灰度值,爲了讓tesseract更準確的識別,能夠把圖像進行二值化,也就是把背景都改爲純白色,把字母都搞成純黑色。那麼如何肯定分割的閾值呢?比較好的方法是畫出圖像的直方圖。
code

//畫出直方圖
Histogram1D histogram1d;
cv::imshow("histogram1d", histogram1d.getHistogramImage(mat));
cv::waitKey(0);

histogram1d

直方圖的橫座標表明灰度值,縱座標表明指定灰度值的點數。圖片

圖像閾值

接下來,開始對圖像進行閾值,這裏選擇的灰度值位150,灰度下於150的設置爲白色,灰度大於150的設置爲黑色。ip

//閾值
Mat threshold_mat;
cv::threshold(mat, threshold_mat, 150, 255, cv::THRESH_BINARY);
cv::imshow("threshold_mat", threshold_mat);
cv::waitKey(0);

threshold_mat

Tesseract識別

把圖片進行閾值後,就能夠進行識別了,直接調用tesseract的API就行了。rem

//使用tesseract識別
char buffer[255];
OCRDecoder decoder;
decoder.decodeGrayMat(threshold_mat, buffer);
cout<<"result:"<<buffer<<endl;

運行程序,能夠看到識別出告終果:

result

get

相關文章
相關標籤/搜索