用 tesseract 和 CxImage 扫描验证码

之前一个扫描验证码的小程序,有使用到一google的开源ocr组件,很不幸的是这个组建里面没有直接支持jpg

图片的ocr,但我们的目标很多都用的是jpg格式的图片。我需要把目标转换成bmp格式才能提交给tessdll处理。

 

之间还有降噪,区域分割等部分处理,之前有一写文件IO的部分在里面,导致程序运行效率不是很好,今天我试了一下 CxImage 这个同样开源的图像处理组建,哈哈 果然它就是我需要的。可以直接load内存里面的图片数据,进行ocr前的数据处理以提高ocr的精度。

 

到目前为止一切进行的都很好,当我把 CxImage中的数据提交给tesseract组件后我得到了"~"。识别不出来。于是又仔细的看了一下tsseract中 dlltest工程中的调用细节。发现里面内置的那个BMP的读取过程默默的为我们做了两件事情。这也就是我们今天要注意的两件事情:

1)把BMP图片里面的数据行进行了倒序。在Windows里BMP仿佛是从最后一行开始处理的。

在这里我们需要对BMP的数据行 就行倒序操作。

 

2)BMP图片格式中数据是4个字节对齐的,是的这样可以提高访问的效率。也就是说对于BMP中的单行

数据来说。如果这一行数据的长度不是4的整数倍的话,后面自动补齐成4字节对齐的。这个当然没有问题

        但是我们把图片数据传递给tesseract的时候这个自动补齐的部分是不能包含在里面的。我们要把它们去掉

即我们必须只保留那些真正表示图片内容的数据。

 

        tesseract里面用 stride 来表示这个值 正确的得到这个值也是这个过程里面的关键。

至于如何正确的得到这个值可以在 tesseract的示例工程中找到。

        

if (iBpp > 8)

{

iStride = (iWidth * iBpp + 7) / 8 ;

}

else

{

iStride = (iWidth + 8/iBpp -1) / (8 / iBpp) ;

}

 

其中iBpp 是 BMP中的 bpp值,iWidth 为图像的相熟宽度。

 

        做好这两点,我们就可以利用CxImage的便利处理各种格式的图片了。哈哈 enjoy it~!

 

        好记性不如烂笔头,记录下来提醒自己。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值