码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Python】【OpenCV】OCR识别(二)——透视变换


    合集 - Python(17)
    1.【Python】【ChatGPT】本地部署ChatGPT学习记录2023-10-242.【Python】【OpenCV】【NumPy】图像和原始字节的转换2023-11-193.【Python】【OpenCV】【NumPy】图像数据的访问2023-11-204.【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示2023-11-215.【Python】【OpenCV】Cameo项目(一)实时显示摄像头帧2023-11-276.【Python】【OpenCV】边缘检测和创建自定义核2023-11-297.【Python】【OpenCV】轮廓检测2023-11-308.【Python】【OpenCV】绘制外接矩形、外接圆2023-12-059.【Python】【OpenCV】凸轮廓和Douglas-Peucker算法2023-12-0610.【Python】【OpenCV】检测直线和圆2023-12-0711.【Python】【OpenCV】定位条形码(一)2023-12-2112.【Python】【OpenCV】定位条形码(二)moments和HuMoments2023-12-2113.【Python】【OpenCV】关于cv2.findContours()轮廓索引(编号)解析(RETR_TREE)2023-12-2614.【Python】【OpenCV】定位二维码2023-12-2815.【Python】【OpenCV】OCR识别(一)——目标区域定位01-02
    16.【Python】【OpenCV】OCR识别(二)——透视变换01-08
    17.【Python】【OpenCV】OCR识别(三)——字符识别01-12
    收起

      对于OCR技术在处理有角度有偏差的图像时是比较困难的,而水平的图像使用OCR识别准确度会高很多,因为文本通常是水平排列的,而OCR算法一般会假设文本是水平的。

      针对上述情况,所以我们在处理有角度的图象时,需要将图像“摆正”,将使用到getPerspectiveTransform方法和warpPerspective方法。

    getPerspectiveTransform:

    参数:

    • src:源图像中的四个点坐标,以浮点数数组或列表的形式表示。这些点应按照逆时针方向指定。
    • dst:目标图像中对应的四个点坐标,以浮点数数组或列表的形式表示。这些点应按照逆时针方向指定。

    返回值:

    • M:一个3x3的透视变换矩阵,以浮点数NumPy数组的形式返回。可以使用此变换矩阵将源图像中的点映射到目标图像中对应的点。

     

    warpPerspective:

    参数:

    • src:输入图像,可以是8位无符号整数类型、32位浮点类型或16位有符号整数类型。
    • M:3x3的变换矩阵,可以使用cv2.getPerspectiveTransform()函数计算得到。
    • dsize:输出图像的大小,以(width, height)的形式指定。可以通过cv2.resize()函数调整大小,也可以直接提供目标大小。
    • flags:插值方法的标志,可以是cv2.INTER_NEAREST、cv2.INTER_LINEAR、cv2.INTER_CUBIC或cv2.INTER_LANCZOS4之一。
    • borderMode:用于处理超出边界的像素值的标志,可以是cv2.BORDER_CONSTANT、cv2.BORDER_REPLICATE、cv2.BORDER_REFLECT、cv2.BORDER_WRAP或cv2.BORDER_REFLECT_101之一。

    返回值:

    • dst:输出图像,与dsize参数指定的大小相同。

     

    Code:

    复制代码
     1 height, width = numpy.int0(cv2.minAreaRect(goal_points)[1])
     2 hw_rate = height / width
     3 new_width = 400
     4 new_height = int(new_width * hw_rate)
     5 pts = numpy.float32([[0, 0], [new_width, 0], [new_width, new_height], [0, new_height]])
     6 
     7 ll = [i for item in iter(goal_points) for i in item]
     8 if ll[0][0] > ll[1][0]:
     9     ll[0], ll[1] = ll[1], ll[0]
    10 ll[2], ll[3] = ll[3], ll[2]
    11 
    12 matrix = cv2.getPerspectiveTransform(numpy.float32(ll), pts)
    13 iout = cv2.warpPerspective(image, matrix, (new_width, new_height))
    复制代码

    结果:

     思路:

     

    1、首先我们将approxPolyDP逼近轮廓(goal_points)所返回的四个坐标点传入minAreaRect来获得逼近轮廓的宽高。

    2、然后我们求取宽高比,为后续新的图片大小做准备。

    3、我们设置一个新的宽(new_width)的值,并根据上一步求得的宽高比得到新的高(new_height)的值。

    4、以顺时针坐标顺序,定义新图片的四个坐标点(pts)。

    5、将goal_points(此时是三维数组)拆分成二维。

    6、通过上一篇博客我们知道了approxPolyDP返回的坐标点是逆时针的,且第一个坐标是变化的,所以我们通过比较第一个坐标的x和第二个坐标的x来确定谁在左上角,并且因为我们定义的新窗口的四个坐标是顺时针,所以需要将第三第四个坐标对调一下,从而符合顺时针的要求。

    7、调用getPerspectiveTransform方法和warpPerspective方法,最终得到我们透视变换后的水平图片。

     

    注:关于warpPerspective的dsize参数,我们可以随意定义宽高,比如上述代码中可以直接将(new_width, new_height)替换成(300, 300)对应的pts中的new_width, new_height也需要进行替换,但是我们得到的图片是正方形的,和原图中的感兴趣区域的长方形并不相符,所以最终得到的透视变换图也就不理想的。

  • 相关阅读:
    基于jsp+java+ssm的农产品购物商城系统-计算机毕业设计
    Matlab之数组字符串函数汇总
    实验9(交换综合实验)
    分享一个卡片轮播
    2023年度中国测绘地理信息类期刊大全
    谣言检测(RDEA)《Rumor Detection on Social Media with Event Augmentations》
    SOA和ESB介绍
    【学习笔记】 - 基础数据结构 :Link-Cut Tree(基础概念篇)
    OpenGL之环境映射
    经颅直流电刺激对大脑网络的调制
  • 原文地址:https://www.cnblogs.com/vangoghpeng/p/17953267
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号