`
huangyongxing310
  • 浏览: 496279 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

opencv 图像几何变换

 
阅读更多
opencv 图像几何变换

实现旋转、平移和缩放图片
了解仿射变换和透视变换
OpenCV函数:cv2.resize(), cv2.warpAffine(), cv2.warpPerspective()


缩放
可以按照比例缩放,也可以按照指定的大小缩放
resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)



平移图片(用仿射变换来完成的)
warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)

M为变换矩阵
borderMode: 边界像素模式,有默认值BORDER_CONSTANT
borderValue: 边界取值,有默认值Scalar()即0



旋转图片
旋转同平移一样,也需要定义一个变换矩阵。OpenCV直接提供了cv2.getRotationMatrix2D()函数用来生成这个矩阵,

getRotationMatrix2D(center, angle, scale)
(中心点,角度,缩放)



翻转图片
镜像翻转图片,可以用cv2.flip()函数
flip(src, flipCode, dst=None)
参数2 = 0:垂直翻转(沿x轴),参数2 > 0: 水平翻转(沿y轴),参数2 < 0: 水平垂直翻转。



仿射变换
要生成这个变换矩阵,需要定义变换前后的三个点,
生成变换矩阵 getAffineTransform(src, dst)



透视变换
透视变换绝对是一项很酷的功能。我们经常会用手机去拍身份证和文件,无论你怎么拍,貌似都拍不正或者有边框。如果你使用过手机上面一些扫描类软件,比如”扫描全能王“,”Office Lens“,它们能很好地矫正图片。
生成透视变换矩阵
getPerspectiveTransform(src, dst)
透视变换
warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)


# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2


def main():
    # 颜色空间转换
    img = cv2.imread("learn.jpg")

    # =================================缩放
    # 按照指定的宽度、高度缩放图片
    res = cv2.resize(img, (150, 150))

    # 按照比例缩放,如x,y轴均放大一倍
    res2 = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)
    # cv2.imshow('shrink', res)
    # cv2.imshow('zoom', res2)
    # cv2.waitKey(0)

    # =================================平移图片
    rows, cols = img.shape[:2]
    print("rows = ", rows)
    print("cols = ", cols)

    M = np.float32([[1, 0, 100], [0, 1, 50]])  # x轴平移100,y轴平移50,

    # 用仿射变换实现平移(平移后的位置用黑包色填充(borderValue指定))
    dst = cv2.warpAffine(img, M, (cols, rows), borderValue=(255, 255, 255))

    # cv2.imshow('shift', dst)
    # cv2.waitKey(0)

    # =================================旋转图片
    M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 1)
    print("Rotation M = ", M)
    dst = cv2.warpAffine(img, M, (cols, rows))
    # cv2.imshow('rotation', dst)
    # cv2.waitKey(0)

    # =================================翻转图片
    dst = cv2.flip(img, 1)
    # 参数2 = 0:垂直翻转(沿x轴),参数2 > 0: 水平翻转(沿y轴),参数2 < 0: 水平垂直翻转。
    # cv2.imshow('flip', dst)
    # cv2.waitKey(0)

    # =================================仿射变换
    # 变换前的三个点
    pts1 = np.float32([[50, 65], [150, 65], [210, 210]])
    # 变换后的三个点
    pts2 = np.float32([[50, 100], [150, 65], [100, 250]])
    # 生成变换矩阵
    M = cv2.getAffineTransform(pts1, pts2)
    print("getAffineTransform M = ", M)

    dst = cv2.warpAffine(img, M, (cols, rows))
    #
    # cv2.imshow('warpAffine', dst)
    # cv2.waitKey(0)

    # =================================透视变换
    # 原图中卡片的四个角点
    pts1 = np.float32([[148, 80], [437, 114], [94, 247], [423, 288]])
    # 变换后分别在左上、右上、左下、右下四个点
    pts2 = np.float32([[0, 0], [320, 0], [0, 178], [320, 178]])
    # 生成透视变换矩阵
    M = cv2.getPerspectiveTransform(pts1, pts2)

    print("getPerspectiveTransform M = ", M)

    # 进行透视变换
    dst = cv2.warpPerspective(img, M, (cols, rows))

    cv2.imshow('warpAffine', dst)
    cv2.waitKey(0)



if __name__ == '__main__':
    main()








分享到:
评论

相关推荐

    QT+opencv图像几何变换,包括图像平移,图像旋转,图像缩放

    这将有助于你掌握图像几何变换的基本原理和应用。 总之,通过QT+OpenCV的组合,我们可以方便地实现图像的各种几何变换,这些变换在图像分析、物体识别、图像拼接等应用场景中都有广泛的应用。理解并熟练掌握这些...

    36.OpenCV图像几何变换万字详解(平移缩放旋转、镜像仿射透视).pdf

    通过上述介绍可以看出,OpenCV为我们提供了一系列强大的工具来实现图像几何变换。无论是简单的平移、缩放、旋转还是复杂的仿射变换、透视变换,都可以通过相应的函数方便地实现。掌握这些基本变换不仅有助于图像处理...

    OpenCV图像几何变换之透视变换

    本文实例为大家分享了OpenCV图像几何变换之透视变换的具体代码,供大家参考,具体内容如下 1. 基本原理  透视变换(Perspective Transformation)的本质是将图像投影到一个新的视平面,其通用变换公式为: (u,v...

    opencv 图像的几何变换

    本主题将深入探讨如何使用OpenCV进行图像的几何变换,主要包括图像的旋转、缩放、内凹变形和外凸变形。我们将使用C++语言,并在Visual Studio 2013环境下进行开发,使用的OpenCV版本为3。 首先,图像旋转是改变图像...

    基于OpenCv图像仿射变换

    通过理解并掌握OpenCV中的仿射变换,我们能够实现更复杂的图像处理任务,例如图像的几何矫正、透视变换等。 在提供的压缩包文件中,`main.cpp`可能是实现上述仿射变换的代码示例,而`放射变换.doc`可能是关于放射...

    图像几何变换代码_图像的几何变换_

    1. **图像几何变换**:这是图像处理的一个基本概念,它涉及将图像从一个坐标系映射到另一个坐标系。常见的几何变换有平移、旋转、缩放、剪切和扭曲等。在Python中,通常使用OpenCV库来实现这些操作,如`geometric_...

    C++实现图像几何变换

    在计算机视觉和图像处理领域,图像几何变换是基础且重要的技术之一。这些变换可以改变图像的位置、方向或形状,以适应不同的应用场景。本教程将深入探讨如何使用C++语言实现图像的几何变换,包括平移、旋转、镜像和...

    12.图像几何变换之图像仿射变换、图像透视变换和图像校正1

    图像几何变换是图像处理中的重要组成部分,主要用于改变图像的形状和位置。本文将重点讨论图像仿射变换、图像透视变换以及基于图像透视变换的图像校正,并进行总结。这些概念和方法在Python中通常借助OpenCV库来实现...

    c++实现图像几何变换

    在IT领域,图像处理是一项重要的...总之,"C++实现图像几何变换"是一个涵盖计算机视觉基础知识、C++编程技巧和OpenCV库应用的综合性课题。通过这个项目,不仅可以掌握图像处理的核心技术,还能提升软件开发的实际能力。

    数字图像几何变换(包含图像校正)代码

    在数字图像处理领域,几何变换是一种重要的技术,用于改变图像的空间布局或形状。这通常涉及到图像的平移、旋转、缩放、错切等操作。本资源提供的代码着重于图像校正,它可以帮助理解并实践这些概念。VS2008是Visual...

    基于OPENCV的图片柱面变换

    柱面投影是一种几何变换方法,它将图像上的每个像素映射到一个半径固定的圆柱面上。在传统的二维图像中,像素位置通常由(x, y)坐标表示,而在柱面投影中,这些像素会按照一定的规则重新定位。在OpenCV中,我们可以...

    Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)

    总结一下最近看的关于opencv图像几何变换的一些笔记. 这是原图: 1.平移 import cv2 import numpy as np img = cv2.imread(image0.jpg, 1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] mode =...

    图像几何变换处理框架

    "图像几何变换处理框架"是一个专门用于实现这些变换的软件框架,它提供了丰富的功能,包括图像增强、去噪、几何变换和形态学处理等核心模块。下面我们将深入探讨这些知识点。 首先,**图像增强**是提升图像质量的...

    数字图像处理图像几何变换

    在计算机视觉和图像处理领域,图像几何变换是一种重要的技术,用于改变图像的形状、位置或大小,以适应不同的应用场景。这种变换通常涉及到坐标系统的转换,包括平移、旋转、缩放、剪切和投影等。在C++编程环境中,...

    基于opencv的bmp图像梯形变换

    梯形变换是一种几何变换,通常用于纠正透视失真或调整图像的形状。例如,在全景图的拼接中,由于相机视角的不同,图像边缘会产生非平行的直线,这时就需要通过梯形变换来使它们平行。梯形变换通过定义一个源图像上的...

    数字图像处理vc++,图像几何变换,灰度变换

    本程序是一个简易的图像编辑系统,使用vc++编写,程序实现了打开图像,保存图像,另存为,复制粘贴,灰度变换,几何变换,图像旋转,图像镜像,图像大小缩放,图像的平移等一些功能。程序思路清晰,非常适合初学者...

    图像几何校正(含程序、源码)

    总结,这个压缩包提供了一个用C#实现的图像几何校正工具,包含了从图像读取、模型构建到坐标变换的完整流程,同时具备精度评估功能,对于学习和实践图像处理的C#开发者来说,是一个宝贵的资源。通过深入研究源码,...

    山东大学数字图像处理实验二:几何变换与变形

    在本实验中,我们主要探讨的是数字图像处理领域中的一个重要主题——几何变换与变形。这个实验是山东大学针对数字图像处理课程所设计的,旨在帮助学生深入理解和掌握图像处理的基本技术,尤其是通过C++编程语言和...

Global site tag (gtag.js) - Google Analytics