opencv3通过简单模板匹配识别数字【行车记录仪速度读取】

要识别的数字在图像的固定区域,并且是印刷体数字。通过提前抠图的方式设定模板,截取图片中的数字与模板进行相似度匹配,找到 相似度最高的模板对应的数字即为识别的结果。

只能应用与最简单情况下的数字识别且复杂度较高。

步骤如下:

1.制作模板,数字0~9

2.图片预处理:灰度处理、二值化

3.图片切割,得到单个的数字图片

4.模板匹配得到数字的值

#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

//求所有像素点的和
int get_pxsum(Mat image) {
    int a=0;
    for(int i=0;i(i,j);
         }
    }
    return a;
}

//求差值最小的模板对应的匹配数字
int getSubstract(Mat image) {
    Mat result_img;
    int min=1000000;
    int result_no=0;//匹配结果
    for(int i=0;i<10;i++) {
        stringstream str;
        str << "/home/wfl/Desktop/test/template/" << i << ".jpg";
        Mat Template = imread(str.str(), CV_LOAD_IMAGE_GRAYSCALE);
        threshold(Template, Template, 100, 255, CV_THRESH_BINARY);
        absdiff(Template,image,result_img);
        //cout<

测试图片

输出结果

你可能感兴趣的:(opencv)