OpenCV - 几何变换(Python实现)

  1. 扩展缩放
    扩展缩放就是放大或缩小图像的尺寸,使用 cv2.resize() 可以实现这个功能。图像的尺寸可以自己手动设置,你也可以指定缩放因子。

cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)

参数 说明
InputArray src 输入图片
OutputArray dst 输出图片
OutputArray dst 输出图片
Size 输出图片尺寸
fx, fy 沿x轴,y轴的缩放系数
interpolation 插值方式
插值方式 解释
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置
INTER_AREA 使用像素区域关系进行重采样。
INTER_CUBIC4x4 像素邻域的双三次插值
INTER_LANCZOS48x8 像素邻域的Lanczos插值
import cv2
import numpy as np
img=cv2.imread('logo.jpg')
# 下面的 None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子
# 因此这里为 None
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)
while(1):
    cv2.imshow('res',res)
    cv2.imshow('img',img)
    if cv2.waitKey(1) & 0xFF == 27:
        break
cv2.destroyAllWindows()

OpenCV - 几何变换(Python实现)_第1张图片

  1. 平移
    平移就是对图像进行水平、竖直方向上的移动。假如我们需要在水平竖直方向上移动Tx,Ty距离,则需要构建如下矩阵(数据类型是 np.float32)。
    在这里插入图片描述
    然后通过 cv2.warpAffine() 函数进行移动。

cv2.warpAffine(img,H,(cols,rows))

参数 解释
img 需要变换的图像
H 变换矩阵
cols,rows 变换后的尺寸
import cv2
import numpy as np

img = cv2.imread('logo.jpg')
H = np.float32([[1,0,100],[0,1,50]])#变换矩阵
rows,cols = img.shape[:2]
res = cv2.warpAffine(img,H,(cols,rows)) #需要图像、变换矩阵、变换后的大小
cv2.imshow('res',res)
cv2.imshow('img',img)

OpenCV - 几何变换(Python实现)_第2张图片

  1. 旋转
    旋转是通过 cv2.getRotationMatrix2D 函数获得旋转矩阵,然后通过 cv2.warpAffine 进行图像旋转。
import cv2
import numpy as np
img=cv2.imread('logo.jpg',0)
rows,cols = img.shape
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)#获得旋转矩阵
# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))
while(1):
    cv2.imshow('img',dst)
    if cv2.waitKey(1)&0xFF==27:
        break
cv2.destroyAllWindows()

OpenCV - 几何变换(Python实现)_第3张图片

  1. 仿射变换
import cv2
import numpy as np
img=cv2.imread('logo.jpg')
rows,cols,ch=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*2,rows*2))
while(1):
    cv2.imshow('img',dst)
    if cv2.waitKey(1)&0xFF==27:
        break
cv2.destroyAllWindows()

OpenCV - 几何变换(Python实现)_第4张图片

  1. 透视变换
import cv2
import numpy as np

img=cv2.imread('logo.jpg')
rows,cols,ch=img.shape
pts1 = np.float32([[0,0],[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))
while(1):
    cv2.imshow('img',dst)
    if cv2.waitKey(1)&0xFF==27:
        break
cv2.destroyAllWindows()

OpenCV - 几何变换(Python实现)_第5张图片

你可能感兴趣的:(【OpenCV】,OpenCV,几何变换,Python)