入门opencv数字识别问题
蒙飞鸿 2021-05-08 06:27:36 最近学习opencv,用了一个网络代码来做魔兽世界时间数字识别测试,结果碰到的问题是都识别为0了。这个网络代码大概是这个流程:
//加载模板
vector<Mat> myTemplate;
for (int i = 0; i < 10; i++)
{
char name[64];
sprintf(name, "E:\\vcs\\number_recognition\\number_recognition\\number_recognition\\image\\%d.jpg", i);
Mat temp = imread(name, 0);
myTemplate.push_back(temp);
}
//按顺序取出和分割数字
vector<Mat> myROI;
for (int i = 0; i < sort_rect.size(); i++)
{
Mat ROI;
ROI = conImage(sort_rect[i].getRect());
Mat dstROI = Mat::zeros(myTemplate[0].size(),myTemplate[0].type());
resize(ROI, dstROI, myTemplate[0].size(), 0, 0, INTER_NEAREST);
myROI.push_back(dstROI);
}
//进行比较,将图片与模板相减,然后求全部像素和,和最小表示越相似,进而完成匹配
vector<int> seq;//顺序存放识别结果
for (int i = 0; i < myROI.size(); i++)
{
Mat subImage;
int sum = 0;
int min = 100000;
int min_seq = 0;//记录最小的和对应的数字
for (int j = 0; j < 10; j++)
{
//计算两个图片的差值
absdiff(myROI[i], myTemplate[j], subImage);
sum = getPiexSum(subImage);
if (sum < min)
{
min = sum;
min_seq = j;
}
sum = 0;
}
seq.push_back(min_seq);
}
实际运行时两个图片的差值都是大于100000,所以几个数字都识别为0 .
要识别的图片是wow的时间数字截图,4个数字+1个冒号的图片大小才35*9像素。我认为插值过大可能是要识别的图片太小而且分辨率太低造成的,但是不确定,也不知道应该如何去解决(使用什么技术),求解答求关键词