美文网首页
3.2 图像的几何变换

3.2 图像的几何变换

作者: sumpig | 来源:发表于2019-03-16 15:01 被阅读0次

变换

opencv 提供了两个转换函数,cv2.warpAffinecv2.warpPerspective,您可以使用它们进行各种转换。

缩放

缩放就是调整图像的大小。opencv为此提供了一个函数 cv2.resize()。可以手动指定图像的大小,也可以指定比例因子。使用不同的插值方法。最好的插值方法是 cv2.INTER_AREA 用于收缩,cv2.INTER_CUBIC(慢)和 cv2.INTER_LINEAR 用于放大。默认情况下,用于所有调整大小的插值方法都是 cv2.INTER_LINEAR 的。可以通过以下任一方法调整输入图像的大小:

import cv2
import numpy as np

img = cv2.imread('messi5.jpg')

res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)

#OR

height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)

平移

平移是物体位置的移动。假设(x,y)方向的偏移量为(t_x, t_y),您可以创建转换矩阵 M,如下所示:

M=\begin{bmatrix} 1,0,t_x\\ 0,1,t_y \end{bmatrix}

您可以放入一个 np.float32 类型的 numpy 数组中,并将其传递到cv2.warpAffine() 函数中。如需转换(100,50),请参见以下示例:

import cv2
import numpy as np

img = cv2.imread('1.png', 1)
rows, cols, channel = img.shape

M = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img, M, (cols,rows))

cv2.imshow('1', img)
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.warpaffine() 函数的第三个参数是输出图像的大小,其形式应为(宽度、高度)。记住 宽度=列数,高度=行数。

旋转

在opencv中提供了 cv2.getRotationMatrix2D() 函数获得变换矩阵。第一参数指定旋转圆点;第二个参数指定旋转角度;第三个参数指定缩放比例。看如下例子:

import cv2
import numpy as np
 
img = cv2.imread('lena.jpg', 1)
rows,cols,channel = img.shape
 
M = cv2.getRotationMatrix2D((cols/2,rows/3),90,0.4)
dst = cv2.warpAffine(img,M,(cols,rows))
 
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

放射变换

仿射变换是一种二维坐标到二维坐标之间的线性变换,并保持二维图形的“平直性”。转换前平行的线,在转换后依然平行。

为了找到变换矩阵,我们需要从输入图像中取三个点及其在输出图像中的对应位置。然后 cv2.getAffineTransform 将创建一个2x3矩阵,该矩阵将传递给 cv2.warpAffine

import cv2
import numpy as np
from matplotlib import pyplot as plt
 
img = cv2.imread('1.png', 1)
rows,cols,channel = img.shape
 
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
 
M = cv2.getAffineTransform(pts1,pts2)
 
dst = cv2.warpAffine(img,M,(cols,rows))
 
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
image.png

透视变换

透视变换需要3×3的变换矩阵,直线在变换后还是保持直线。为了构造变换矩阵,你需要输入图像的4个点和对应的要输出图像的4个点;要求这4个点其中3个点不共线。使用cv2.getPerspectiveTransform函数构造透视变换矩阵。代码:

img = cv2.imread('sudokusmall.png')
rows,cols,ch = img.shape

pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])

M = cv2.getPerspectiveTransform(pts1,pts2)

dst = cv2.warpPerspective(img,M,(300,300))

plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
image.png

相关文章

  • 3.2 图像的几何变换

    变换 opencv 提供了两个转换函数,cv2.warpAffine 和 cv2.warpPerspective,...

  • OpenCV实现图像的几何变换

    图像的几何变换 几何变换主要包括缩放、平移、旋转、仿射变换、透视变换和图像裁剪等。执行这些几何变换的两个关键函数是...

  • 图像的几何变换1

    图像的几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像中的新生位置。几何变换不改变图像的像素值...

  • 图片处理-opencv-7.图像几何变换

    图像几何变换 1.图像仿射变换 图像仿射变换又称为图像仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一...

  • Python OpenCV库的常见应用2

    上一节:《Python OpenCV库的常见应用1》。本节介绍:图像几何变换。图像几何变换主要有: 放缩:调整图片...

  • 001.opencv图像几何变换

    1. 数学背景 1. 几何变换的含义:改变图像的几何位置、形状、尺寸等几何特征 1.1 位置变换:(刚性变换) 平...

  • 列举几种常见的图像数据增广

    基于图像处理: 几何变换( Geometric Transformations)翻转变换( Flipping)移动...

  • 1.9 openCV-python 几何变换

    几何变换 学习对图像进行各种几个变换,例如移动,旋转,仿射变换等。

  • opencv图像的几何变换

    1.扩展缩放cv2.resize() 只是改变图像的尺寸大小,cv2.resize()可以实现这个功能。在缩放时推...

  • 图像的几何变换(一)

    1.图像的平移 图像的平移是图像的几何变换中最简单的变换之一,它是将一幅图像上的所有点都按照给定的偏移量沿水平方向...

网友评论

      本文标题:3.2 图像的几何变换

      本文链接:https://www.haomeiwen.com/subject/gtcsmqtx.html