Python中OpenCV透视变换恢复扭曲图像

这篇具有很好参考价值的文章主要介绍了Python中OpenCV透视变换恢复扭曲图像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python中OpenCV透视变换恢复扭曲图像

在处理图像问题时,经常会遇到将要处理的目标的位置是斜的,需要使用透视变换进行矫正。如下图,该图片中左边的目标是扭曲倾斜拍摄的,那么任务就是将其矫正过来,如下图右图所示。

扭曲图像矫正 python,python,算法,opencv,python,计算机视觉

方法

  • 前提1:这里假设我已经知道四个点坐标(可用深度学习方法检测/分割)和目标宽高比(比如身份证、驾驶证、发票等有固定宽高比)
  • 基本流程:
    • 1、计算变换矩阵getPerspectiveTransform
    • 2、透视变换warpPerspective
  • 一些理论可参考:https://zhuanlan.zhihu.com/p/36082864

函数接口简介

# 变换矩阵函数
Mat getPerspectiveTransform(const Point2f* src, const Point2f* dst)
# 参数const Point2f* src:原图的三个固定顶点
# 参数const Point2f* dst:目标图像的三个固定顶点
# 返回值:Mat型变换矩阵,可直接用于warpPerspective()函数
# 注意,顶点数组长度超过4个,则会自动以前4个为变换顶点;数组可用Point2f[]或Point2f*表示

# 透视变换函数
void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
# 参数InputArray src:输入变换前的图像;
# 参数OutputArray dst:输出变换后图像,需要初始化一个空矩阵用来保存结果,不用设定矩阵尺寸;
# 参数Size dsize:设置输出图像大小;
# 参数int flags=INTER_LINEAR:设置插值方式,默认方式为线性插值;

代码

def get_rotate_crop_image(img, points):
    '''
    img_height, img_width = img.shape[0:2]
    left = int(np.min(points[:, 0]))
    right = int(np.max(points[:, 0]))
    top = int(np.min(points[:, 1]))
    bottom = int(np.max(points[:, 1]))
    img_crop = img[top:bottom, left:right, :].copy()
    points[:, 0] = points[:, 0] - left
    points[:, 1] = points[:, 1] - top
    '''
    assert len(points) == 4, "shape of points must be 4*2"
    img_crop_width = int(
        max(
            np.linalg.norm(points[0] - points[1]),
            np.linalg.norm(points[2] - points[3])))
    img_crop_height = int(
        max(
            np.linalg.norm(points[0] - points[3]),
            np.linalg.norm(points[1] - points[2])))
    pts_std = np.float32([[0, 0], [img_crop_width, 0],
                          [img_crop_width, img_crop_height],
                          [0, img_crop_height]])
    M = cv2.getPerspectiveTransform(points, pts_std)
    dst_img = cv2.warpPerspective(
        img,
        M, (img_crop_width, img_crop_height),
        borderMode=cv2.BORDER_REPLICATE,
        flags=cv2.INTER_CUBIC)
    return dst_img


if __name__ == '__main__':
    img_path = '../images/trans/test01.jpg'
    img = cv2.imread(img_path)
    # 四个定点左边
    points = [180, 160, 656, 152, 760, 414, 86, 428]
    # 行驶证比例:102/73
    points = np.array(points).astype(np.float32).reshape(4, 2)
    partImg = get_rotate_crop_image(img, points)
    height, width, _ = partImg.shape
    cv2.imwrite('text01.jpg', partImg)
    # 最长边为长边,resize图片
    new_height = int(width * 73/102)
    partImg = cv2.resize(partImg,(width, new_height))
    cv2.imwrite('text.jpg', partImg)

完整结果

扭曲图像矫正 python,python,算法,opencv,python,计算机视觉文章来源地址https://www.toymoban.com/news/detail-808863.html

到了这里,关于Python中OpenCV透视变换恢复扭曲图像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCvSharp (C# OpenCV) 二维码畸变矫正--基于透视变换(附源码)

        本文主要介绍如何使用OpenCvSharp中的透视变换来实现二维码的畸变矫正。     由于CSDN文章中贴二维码会导致显示失败,大家可以直接点下面链接查看图片:     C# OpenCV实现二维码畸变矫正--基于透视变换 (详细步骤 + 代码)      讲解实现步骤之前先看下效果(左边是原图

    2024年02月15日
    浏览(40)
  • 【Python】【OpenCV】OCR识别(二)——透视变换

    对于OCR技术在处理有角度有偏差的图像时是比较困难的,而水平的图像使用OCR识别准确度会高很多,因为文本通常是水平排列的,而OCR算法一般会假设文本是水平的。 针对上述情况,所以我们在处理有角度的图象时,需要将图像“摆正”,将使用到getPerspectiveTransform方法和

    2024年02月03日
    浏览(44)
  • (九)相机内参、外参、反透视变换python opencv

    任务需求:将相机上的一个点投影到真实世界平面上去。 原则上单目相机是不可以的,因为只记录了二维信息,真实世界是三维的,双目相机可以通过视差,或者单目+IMU组合,但是 由于特征点在地面上的先验知识 ,因此可以进行反透视变换。方法有很多种那个,这里采用计

    2024年02月06日
    浏览(48)
  • 【opencv】:图像的透视变换

    仿射变换(Affine Transformation或 Affine Map) , 又称为仿射映射, 是指在几何中, 图像进行从一个向量空间进行一次线性变换和一次平移, 变换为到另一个向量空间的过程。我们常说的仿射变换是透视变换的一个特例。 以上便是透视变换的原理图,即将源图像通过投影映射,

    2024年02月15日
    浏览(44)
  • 使用opencv对图像进行透视变换

    一.什么是透视变换 透视变换就是透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。简单的来说就是

    2024年02月08日
    浏览(50)
  • 【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】

    透视变换(Perspective Transformation)是一种图像处理中常用的变换手段,它用于将图像从一个视角映射到另一个视角,常被称为投影映射。透视变换可以用于矫正图像中的透视畸变,使得图像中的物体在新的视平面上呈现更加规则的形状。 透视变换通常涉及到寻找图像中的特定

    2024年02月03日
    浏览(64)
  • Python OpenCV 图像矫正的原理与实现

    目录hw1下的图像是一些胶片的照片,请将其进行度量矫正。 推荐流程:采用 Canny算子 ,检测边缘点;采用 Hough直线检测 ,根据边缘点检测胶片边缘对应的4条直线;4条直线在图像平面中的交点为胶片图像的4个顶点。根据4个顶点与真实世界中胶片的位置(假设胶片图像长宽比

    2024年02月16日
    浏览(42)
  • 倾斜矫正:用Python和OpenCV实现图像倾斜校正

    图像倾斜是在图像获取或扫描过程中常见的问题,它可能会导致图像失真、文字难以识别或其他应用中的问题。在本文中,我们将使用Python编程语言和OpenCV库来实现图像倾斜校正。 首先,我们需要安装OpenCV库。可以使用以下命令在Python环境中安装它: 安装完成后,我们可以

    2024年02月03日
    浏览(76)
  • Opencv-C++笔记 (16) : 几何变换 (图像的翻转(镜像),平移,旋转,仿射,透视变换)

    图像旋转是指图像按照某个位置转动一定的角度的过程,旋转中图像仍保持着原始尺寸。图像旋转后图像水平对称轴、垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换。 假设有一个点:P(x,y),它在绕原点 O(0,0) 旋转 β 后,被转换成

    2024年02月14日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包