C#基于OpenCVsharp提取文字区域

最近工作中需要用到图像文字识别,但由于图像比较大需要识别的文字比较多,所以全图识别的话效果不好,所以需要对文字区域进行检测提取,再进行识别。

功能需要用.net实现,自己对图像识别方面并不熟悉,于是上网找资料发现Python方面的资料比较多,但C#方面的资料真是少之又少。找到的参考文章https://blog.csdn.net/huobanjishijian/article/details/63685503 写的比较详细。

首先想到的是用C#调用Python程序,但是实践以后发现速度比较慢,由于处理的图片比较多,所以放弃了这种方法。

由于C#也有相应的opencv库,所以最终准备根据Python代码重写C#代码。

先在工具 - nuget中搜索安装OpenCVSharp3,注意OpenCVSharp4也已经有了,但是代码与OpenCVSharp3有较大区别,并且OpenCVSharp3与Python代码的方法比较接近,所以选择OpenCVSharp3。

原理请大家主要看原文章,写的很详细了,这里贴出一部分源码,如需完整代码,请查看我的资源或者github

https://github.com/jsnjfz/OpenCVSharpDemo.git

            //读取灰度图
            using (Mat src = new Mat(imgPath, ImreadModes.Grayscale))
            {
                //1.Sobel算子,x方向求梯度
                Mat sobel = new Mat();
                Cv2.Sobel(src, sobel, MatType.CV_8U, 1, 0, 3);

                //2.二值化
                Mat binary = new Mat();
                Cv2.Threshold(sobel, binary, 0, 255, ThresholdTypes.Otsu | ThresholdTypes.Binary);

                //3. 膨胀和腐蚀操作的核函数
                Mat element1 = new Mat();
                Mat element2 = new Mat();
                OpenCvSharp.Size size1 = new OpenCvSharp.Size(30, 9);
                OpenCvSharp.Size size2 = new OpenCvSharp.Size(24, 6);

                element1 = Cv2.GetStructuringElement(MorphShapes.Rect, size1);
                element2 = Cv2.GetStructuringElement(MorphShapes.Rect, size2);

                //4. 膨胀一次,让轮廓突出
                Mat dilation = new Mat();
                Cv2.Dilate(binary, dilation, element2);

                //5. 腐蚀一次,去掉细节,如表格线等。注意这里去掉的是竖直的线
                Mat erosion = new Mat();
                Cv2.Erode(dilation, erosion, element1);

                //6. 再次膨胀,让轮廓明显一些
                Cv2.Dilate(erosion, dilation2, element2, null, 3);
            }

识别效果如图,和原文章一致,经测试批量识别效果也可以接受

转载请注明来源。

 

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值