最近學習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像素。我認為插值過大可能是要識別的圖片太小而且解析度太低造成的,但是不確定,也不知道應該如何去解決(使用什么技術),求解答求關鍵詞
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/283447.html
標籤:OpenCV
上一篇:手風琴
下一篇:用matlab求解一個混沌現象
