学习日记(5)

用了三天时间搞定了图像处理部分,灰度化图像和二值化图像,二值化图像中有包括了大律法取阈值。经过昨天和今天的优化速度比开始做的时候的速度快了10几倍(感觉上是)。现在总结一下:

  1. 图像捕捉是用别人写的类,并不难,不过有时会出现连接不上directshow的lib的情况,感到很郁闷,代码和做法一样,但是确会出错,很郁闷,不知道是什么原因。
  2. 灰度化是主要是用到这条公式:Red*0.299+Green*0.587+Blue*0.114; 然后将其每个象素点的rgb值都一样赋值。这些都很简单,只要弄清了bmp格式文件的结构就行了。其实也可以直接用Green值直接作为灰度值,或者用三个颜色的平均值,看起来感觉差不多,不过如果做较高要求的处理时还是用公式较好,效果始终有点不一样。
  3. 灰度化后要做的是二值化,二值化其实很简单,就是设定一个阈值,判断没个点的色度是比这个阈值大还是小,小的取0即黑色,打的取255,即白色。在做这一部的时候走了个弯路,开始是用循环处理没个点,然后每处理一个象素点就写入文件一次cfile.write(&color,sizeof(color));这样下来虽然也可以做到,但是速度特慢,大概要两三妙才处理好一幅480*640的图像。后来优化了一下,用c++的动态数组,BYTE *p=new BYTE[图像的大小];先将处理好的象素点一次放入数组,然后再用write函数直接一次性写入文件,测试效果很明显。
  4. 二值化时取的阈值要用算法算出来。我们用的就时大律法,其中用到pg[256]保存0到255每个色度的数量pg[color]++放在灰度化的循环中记录色度的数量,再利用大律法算法取到阈值将其带入就行了。
  5. 今天整合了一下程序,发现vc 的ontimer执行函数内的函数并不是从上到下,先执行玩上面的函数后再执行下面的函数的,而是上面的函数调用后就继续执行下面的函数代码,也就是没有确保上面代码的完成状况。由于我的程序需要上面函数的结果,执行的时候就产生了找不到相关信息的错误。最后没办法只好将下面的代码加到上面函数中去,问题得到解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值