CSharp Archive

C#实现验证码中粘连字符分割(六)

《C#实现验证码中粘连字符分割》发布了一系列文章,上一篇我们讲到了谷点的过滤。谷点过滤完成后,我们就可以根据最终确定的谷点来执行滴水算法,从而得到最终的分割路径。含四个字符的验证码图片可通过滴水算法得到3条分割路径,为方便程序统一处理,左侧与右侧边界会作为两条分割路径存储在路径集中。这样对于四个字符的图片而言,就有五条分割路径,每两条路径之间得到一个字符。

C#实现验证码中粘连字符分割(五)

在《C#实现验证码中粘连字符分割(四)》一文中我们说到了找含粘连字符验证码图片中谷点的方法,一般情况下,找到的谷点均大于我们需要分割的字符数。以我所收集的10张验证码图片为样本,用上一篇文章提到的寻找谷点的方法均找到的谷点的数量均大于待分割字符的数量,因此我们必须过滤掉一部分无效谷点。

C#实现验证码中粘连字符分割(四)

谷点的准确性直接决定着分割算法的成败,本文分享目前分割算法中暂用的谷点找寻方案。该谷点查找方案仅适用于二值化的骨架图像,首先我们将字符或图像的笔画方向发生变化的点定义为谷点,例如笔画原本趋势为下降,从某个点开始其趋势为水平或者上升,那么该点将被记录为谷点。

C#实现验证码中粘连字符分割(三)

以验证码图片为例,一般情况下我们关注的字符部分可能只占有原始图片的1/2甚至更少。而粘连字符分割算法中,有多个步骤需要遍历字符像素点,因此在开始执行分割算法之前,需要先统计字符部分的范围,后续遍历动作将在此范围内执行。

C#实现验证码中粘连字符分割(二)

在C#实现验证码中粘连字符分割(一)中,我分享了粘连字符分割算法的框架与完整的代码。其中滴水算法是整个分割算法的核心,而寻找正确的滴落起始点则是重中之重。本文和大家分享我曾经尝试过的寻找滴落起始点的方法与相关文献。

C#实现验证码中粘连字符分割(一)

验证码中粘连字符分割有助于Tessract识别此类验证码,本文分享的分割算法可以成功分割较简单的粘连字符。在此分享实现思路以及相关代码,期望能抛砖引玉。

C#实现灰度图像”伪彩色”处理_局部彩色化

将彩色图像转换为灰度图像是一个不可逆的过程,灰度图像不可能变换为原来的彩色图像。而某些场合需要将灰度图像转变为彩色图像,伪彩色处理主要是把黑白的灰度图像或者多波段图像转换为彩色图像的技术过程,其目的是提高图像内容的可辨识度。本文实现的是将灰度图像的某个坐标范围变换为指定颜色,并非真正意义上的伪彩色。

C#实现图像骨架提取zhang-Suen算法

图像骨架是一种图像对象结构的表示方法,Zhang-Suen算法是由Zhang T Y在1984年提出的一种并行模板匹配骨架提取算法.该算法是一种基于删除的骨架提取算法。OpenCV中貌似没有类似功能的函数,但Github上有一个名为cuda-fingerprinting的项目(感谢原作者)包含了该算法,我将相关代码提取出来,做了一些简单的改动,将其封装成一个轻量级的可为字符或图像瘦身的类,这里分享给大家。

C#中cvFindContours与cvDrawContours使用方法

cvFindContours可以从二值图像中检索轮廓,并返回检测到的轮廓的个数,cvDrawContours则可用于绘制cvFindContours函数所找到的轮廓。这两个函数均为OPENCV图像处理库中的函数,我们在C#中要借助于EMGU,通过CvInvoke来调用这两个函数。斗胆借用人气王----挖掘机的肖像来演示这两个函数的效果,见下图。

用LockBits方法访问图像数据

位图类包含LockBits和相应的UnlockBits方法,我们可以使用这个方法在内存中指定一片区域来存储位图的像素数据,可以直接访问这块内存并对位图中的像素数据进行修改。LockBits返回BitmapData类,这个类描述了位图在指定内存中存储数据的布局与位置。
Fork me on GitHub