基于opencv的数字识别

    最近学习了opencv,然后想通过其对图片上的数字进行识别,参考了网上几篇关于opencv数字识别的博客,我自己也写了一个程序玩玩。我是在vs2017和opencv3.4.1环境下实现的。

    这里先说一下我的思路和步骤:

  1. 加载需要识别的图片,然后将其转化为二值图
  2. 寻找数字的外轮廓,切记不可以找全部轮廓,否则一个数字将会有多个轮廓,识别起来就很麻烦了
  3. 对轮廓进行排序,因为使用findcontours函数寻找到的轮廓顺序不一定是我们想要的,因此需要对找到的数字轮廓根据输入的图片进行排序
  4. 按顺序将数字轮廓分割,一个一个提取出来
  5. 进行识别和匹配,将提取出来的数字与模板数字(需要自己创建)进行比较,这里采用两幅图片像素相减的方法,寻找出差值最小的图片即为最匹配的数字 

一、图片预处理

    将输入的图片转化为二值图以便寻找轮廓

        //输入要识别的图片,并显示
	Mat srcImage = imread("number.jpg");
	imshow("原图", srcImage);
	//对图像进行处理,转化为灰度图然后再转为二值图
	Mat grayImage;
	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
	Mat binImage;
	//第4个参数为CV_THRESH_BINARY_INV是因为我的输入原图为白底黑字
	//若为黑底白字则选择CV_THRESH_BINARY即可
	threshold(grayImage, binImage, 100, 255, CV_THRESH_BINAR
  • 33
    点赞
  • 300
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值