opencv实战之手写数字识别

实验图片:手写数字图片

实验软件:opencv1.0 、vc++6.0


之前做到了环境配置和数米粒实验。

对opencv有了简单的了解,对像素的处理也有了一定的基础

由于电脑注册表直接爆炸,重新安装了系统,所以导致之前做好的数字识别运行不了,所以环境配置也很重要。环境配置链接如下

http://blog.csdn.net/qq_32300341/article/details/70186379


今天我们来做一个比较简单的数字识别。

第一步是导入图片。

我对图片导入的方法是建立一个char类型的二维数组每一行存放一个图片的地址。

获得了地址,也就是获得了图片。

第二步是划分样本。

我利用采用的是二路交叉验证的方法,所有的数据一半作为训练样本,

另一半作为测试样本。具体划分是第一次测试前一半图片作为测试样本,后一半作为训练样本。

第三步将没副训练样本图片划分16份

opencv中提供了将图片切割的函数,但是对初学者我建议自己写函数,这样对像素的理解比较深刻。

通过遍历图像数据,统计没个小块的黑色像素与小块整体像素个数的比,将这16块个比值存储到一个数组中。

在这个过程中有一个问题,就是划分成16块之后的数据有很多空白块,这些空白块并没有什么作用,

反而会引起误差,我就想把原始图像切割一下变成一个小的数字占比大的图像。我也就这样去做了。

切割图片代码如下:

void clear(IplImage *image,IplImage *&backImg)//去除多余的空白
{
uchar *data= (uchar *)image->imageData;
int  wp = image->widthStep;
int i,j;
int h1=-1,h2=-1,w1=-1,w2=-1;
for( i = 0; i < image->height; i++)//从上至下查找第一个黑色像素的y坐标
{
for(j = 0; j < imag

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值