資源簡介
對印刷數(shù)字識別。
過程:
1對圖片進行灰度化二值化.
2對圖片上的數(shù)字進行切割
3.制作匹配印刷體數(shù)字模板
4.平方和最小原則對數(shù)字識別
配置環(huán)境:
VS2013+,OPENCV2.4.xx都可以(opencv3不支持,可以配置多版本opencv)
注意opencv的配置:如果沒有需要先下載。
隨后改項目屬性:
1.VC++目錄 包含目錄:I:\opencv2.413\build\include
I:\opencv2.413\build\include\opencv
I:\opencv2.413\build\include\opencv2
2.庫目錄:I:\opencv2.413\build\x64\vc14\lib
3.鏈接器-輸入-附加依賴項:
opencv_core2413d.lib
opencv_imgproc2413d.lib
opencv_highgui2413d.lib
代碼片段和文件信息
/*****************************************************
圖片數(shù)字識別
*****************************************************/
#include?“cv.h“
#include?“highgui.h“
#include?“cxcore.h“
#include?????
#include??
using?namespace?std;
using?namespace?cv;
int?getColSum(Mat?src?int?col);???//列求和
int?cutLeft(Mat&?src?Mat&?leftImg?Mat&?rightImg);//左右切割??
void?cutTop(Mat&?src?Mat&?dstImg);//上下切割
int?getRowSum(Mat?src?int?row);???//航求和
void?getPXSum(Mat?&src?int?&a);//獲取所有像素點和
int??getSubtract(Mat?&src?int?TemplateNum);
void?pictureCut();??//模板數(shù)字圖片切割
LPCWSTR?dirName?=?L“.\\AAA“;??//保存分割后照片的文件夾
int?main()
{
pictureCut();
//創(chuàng)建文件夾保存分割后的照片
BOOL?flag?=?CreateDirectory(dirName?NULL);
Mat?src?=?imread(“.\\sss.png“?CV_LOAD_IMAGE_GRAYSCALE);
threshold(src?src?100?255?CV_THRESH_BINARY_INV);
imshow(“原始灰度圖二值處理后“?src);
printf(“識別的數(shù)字是:\n“);
Mat?leftImg?rightImg;
int?res?=?cutLeft(src?leftImg?rightImg);
int?i?=?0;
while?(res?==?0)
{
char?nameLeft[10];
sprintf(nameLeft?“%dLeft“?i);
Mat?srcTmp?=?rightImg;
getSubtract(leftImg?10);//數(shù)字識別
res?=?cutLeft(srcTmp?leftImg?rightImg);
}
waitKey(0);
return?0;
}
//模板數(shù)字圖片切割
void?pictureCut()
{
Mat?src?=?imread(“.\\base.png“?CV_LOAD_IMAGE_GRAYSCALE);
threshold(src?src?100?255?CV_THRESH_BINARY_INV);
Mat?leftImg?rightImg;
int?res?=?cutLeft(src?leftImg?rightImg);
int?i?=?0;
while?(res?==?0)
{
char?nameLeft[10];
sprintf(nameLeft?“%dLeft“?i);
char?nameRight[10];
sprintf(nameRight?“%dRight“?i);
i++;
stringstream?ss;
ss?< imwrite(“.\\AAA\\“?+?ss.str()?+?“.jpg“?leftImg);//保存截取圖片做為模板
ss?>>?nameLeft;
Mat?srcTmp?=?rightImg;
res?=?cutLeft(srcTmp?leftImg?rightImg);
}
}
int?cutLeft(Mat&?src?Mat&?leftImg?Mat&?rightImg)//左右切割??
{
int?left?right;
left?=?0;
right?=?src.cols;
int?i;
for?(i?=?0;?i? {
int?colValue?=?getColSum(src?i);
if?(colValue?>?0)
{
left?=?i;
break;
}
}
if?(left?==?0)
{
return?1;
}
for?(;?i? {
int?colValue?=?getColSum(src?i);
if?(colValue?==?0)
{
right?=?i;
break;
}
}
int?width?=?right?-?left;
Rect?rect(left?0?width?src.rows);
leftImg?=?src(rect).clone();
Rect?rectRight(right?0?src.cols?-?right?src.rows);
rightImg?=?src(rectRight).clone();
cutTop(leftImg?leftImg);
return?0;
}
int?getColSum(Mat?src?int?col)
{
int?sum?=?0;
int?height?=?src.rows;
int?width?=?src.cols;
for?(int?i?=?0;?i? {
sum?=?sum?+?src.at?(i?col);
}
return?sum;
}
void?cutTop(Mat&?src?Mat&?dstImg)//上下切割
{
int?top?bottom;
top?=?0;
bottom?=?src.rows;
int?i;
for?(i?=?0;?i? {
int?colValue?=?getRowSum(src?i);
if?(colValue?>?0)
{
top?=?i;
break;
}
}
for?(;?i? {
int?colValue?=?getRowSum(src?i);
if?(colValue?==?0)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-06?16:21??testNumber\
?????目錄???????????0??2017-11-02?21:26??testNumber\.vs\
?????目錄???????????0??2017-11-02?21:26??testNumber\.vs\testNumber\
?????目錄???????????0??2017-11-02?21:26??testNumber\.vs\testNumber\v14\
?????文件???????31744??2018-11-06?16:21??testNumber\.vs\testNumber\v14\.suo
?????文件????51118080??2018-11-06?16:21??testNumber\testNumber.sdf
?????文件????????1312??2017-11-02?17:43??testNumber\testNumber.sln
?????目錄???????????0??2018-11-06?16:21??testNumber\testNumber\
?????目錄???????????0??2017-11-02?21:56??testNumber\testNumber\AAA\
?????文件????????1499??2018-11-06?16:21??testNumber\testNumber\AAA\0Left.jpg
?????文件?????????834??2018-11-06?16:21??testNumber\testNumber\AAA\1Left.jpg
?????文件????????1242??2018-11-06?16:21??testNumber\testNumber\AAA\2Left.jpg
?????文件????????1339??2018-11-06?16:21??testNumber\testNumber\AAA\3Left.jpg
?????文件????????1069??2018-11-06?16:21??testNumber\testNumber\AAA\4Left.jpg
?????文件????????1246??2018-11-06?16:21??testNumber\testNumber\AAA\5Left.jpg
?????文件????????1472??2018-11-06?16:21??testNumber\testNumber\AAA\6Left.jpg
?????文件????????1037??2018-11-06?16:21??testNumber\testNumber\AAA\7Left.jpg
?????文件????????1748??2018-11-06?16:21??testNumber\testNumber\AAA\8Left.jpg
?????文件????????1652??2018-11-06?16:21??testNumber\testNumber\AAA\9Left.jpg
?????文件????????4754??2017-11-02?18:28??testNumber\testNumber\ba
?????文件????????4459??2018-11-06?16:21??testNumber\testNumber\main.cpp
?????文件????????5018??2017-11-02?18:42??testNumber\testNumber\sss.png
?????文件????????7629??2018-11-06?16:15??testNumber\testNumber\testNumber.vcxproj
?????文件?????????945??2017-11-02?17:44??testNumber\testNumber\testNumber.vcxproj.filters
?????目錄???????????0??2018-11-06?16:12??testNumber\testNumber\x64\
?????目錄???????????0??2018-11-06?16:21??testNumber\testNumber\x64\Debug\
?????文件??????715977??2018-11-06?16:21??testNumber\testNumber\x64\Debug\main.obj
?????文件????????1540??2018-11-06?16:21??testNumber\testNumber\x64\Debug\testNumber.log
?????目錄???????????0??2018-11-06?16:21??testNumber\testNumber\x64\Debug\testNumber.tlog\
?????文件?????????612??2018-11-06?16:21??testNumber\testNumber\x64\Debug\testNumber.tlog\CL.command.1.tlog
?????文件???????46214??2018-11-06?16:21??testNumber\testNumber\x64\Debug\testNumber.tlog\CL.read.1.tlog
............此處省略12個文件信息
評論
共有 條評論