【Python】【OpenCV】OCR识别(一)——目标区域定位
1.【Python】【ChatGPT】本地部署ChatGPT学习记录2.【Python】【OpenCV】【NumPy】图像和原始字节的转换3.【Python】【OpenCV】【NumPy】图像数据的访问4.【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示5.【Python】【OpenCV】Cameo项目(一)实时显示摄像头帧6.【Python】【OpenCV】边缘检测和创建自定义核7.【Python】【OpenCV】轮廓检测8.【Python】【OpenCV】绘制外接矩形、外接圆9.【Python】【OpenCV】凸轮廓和Douglas-Peucker算法10.【Python】【OpenCV】检测直线和圆11.【Python】【OpenCV】定位条形码(一)12.【Python】【OpenCV】定位条形码(二)moments和HuMoments13.【Python】【OpenCV】关于cv2.findContours()轮廓索引(编号)解析(RETR_TREE)14.【Python】【OpenCV】定位二维码
15.【Python】【OpenCV】OCR识别(一)——目标区域定位
16.【Python】【OpenCV】OCR识别(二)——透视变换17.【Python】【OpenCV】OCR识别(三)——字符识别接着练手图像处理例子
抛开网上截图进行OCR识别,更多的图源来自于我们的手机,相机等等设备,而得到的图片都并非是板正的,大多随手一拍的图源都是带有角度的,所以我们需要先将图像进行摆正。
首先先对图像进行预处理,上代码:
1 def edge_detect(image): 2 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 3 edges = cv2.Canny(gray, 100, 200) 4 contours, hierarchy = cv2.findContours(edges.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 5 conts = sorted(contours, key=cv2.contourArea, reverse=True)[:5] 6 for c in conts: 7 peri = cv2.arcLength(c, True) 8 approx = cv2.approxPolyDP(c, 0.02*peri, True) 9 if len(approx) == 4: 10 ss = approx 11 cv2.drawContours(image, [ss], -1, (0, 255, 0), 2) 12 cv2.imshow('', image)
1、使用Canny来进行边缘提取。
2、使用cv2.approxPolyDP来进行轮廓逼近。
3、将我们想要的轮廓绘制出来。
上述代码中,cv2.approxPolyDP方法的epsilon参数很有讲究,先贴上parameter和reval。
参数说明:
curve
:输入的轮廓数据。epsilon
:指定逼近精度,即源轮廓到逼近结果的最大距离。较小的值会得到更精确的逼近,但轮廓的点数也会更多。closed
:一个布尔值,指示轮廓是否闭合。approxCurve
:可选参数,表示输出的逼近多边形曲线。
该函数返回逼近多边形的结果:
使用cv2.approxPolyDP
函数可以将复杂的轮廓近似为简单的多边形,从而方便后续的形状分析和处理操作。(注:针对approxPolyDP返回的坐标顺序,和输入轮廓的顺序有关,下述图片输入的顺序是逆时针)
关于epsilon参数,这是一个和周长相关的参数,使用在进行轮廓逼近时的误差:
1、当epsilon(ε)越大时,也就是说,我们给定的误差范围越大,这就代表着我们得到的逼近轮廓的形状越是粗糙或者说敷衍(顶点较少),但是过大时会导致得到的逼近形状并不能很好的表达原始轮廓的形状。
2、当epsilon(ε)越小时,那么得到的逼近形状就越精确或者说细致(顶点较多),但是过小时会导致得到的逼近形状过于接近原始轮廓,出现过拟合的现状。
不理解的可以动手调整传入epsilon(ε)的值看看效果。
运行结果:
参考博文:OpenCV实战(4)——文档扫描OCR识别&答题卡识别判卷(文档扫描,图像矫正,透视变换,OCR识别) - 战争热诚 - 博客园 (cnblogs.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)