1.9 openCV-python 几何变换

2020-02-21  本文已影响0人  wangsb_2020

几何变换

学习对图像进行各种几个变换,例如移动,旋转,仿射变换等。
#扩展缩放
import cv2
import numpy as np

img = cv2.imread('namei.jpeg')
res1 = cv2.resize(img, None, fx=0.2, fy=0.2, interpolation=cv2.INTER_CUBIC)

#OR
# 这里呢,我们直接设置输出图像的尺寸,所以不用设置缩放因子
height, width = img.shape[:2]
res2 = cv2.resize(img, (2*width, 2*height), interpolation=cv2.INTER_CUBIC)

cv2.imshow('res1', res1)
cv2.imshow('res2', res2)
cv2.imshow('namei', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png
# 平移
import cv2
import numpy as np
img = cv2.imread('namei.jpeg')
rows, cols = img.shape[:2]

# 定义平移矩阵,需要是numpy的float32类型
# x轴平移200,y轴平移100, 2*3矩阵
M = np.float32([[1,0,200], [0,1,100]])
# 用仿射变换实现平移
img_m = cv2.warpAffine(img, M, (cols, rows), borderValue=(255,255,0))
# 警告:函数cv2.warpAffine() 的第三个参数的是输出图像的大小,它的格式
# 应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行
# 数。
cv2.imshow('move', img_m)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png
# 旋转
# 在不缩放的情况下将图像旋转90 度。
import cv2
import numpy as np
img = cv2.imread('namei.jpeg')
rows, cols = img.shape[:2]

# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)

# 第三个参数是输出图像的尺寸中心
dst = cv2.warpAffine(img, M, (cols, rows))

cv2.imshow('namei', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png
# 仿射变换
## 在仿射变换中,原图中所有的平行线在结果图像中同样平行
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('namei.jpeg')
rows, cols, channels = img.shape
print(img.size)
print(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))
cv2.imshow('Input', img)
cv2.imshow('Output', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png
# 透视变换
import cv2
import numpy as np
img = cv2.imread('namei.jpeg')
rows, cols, channels = img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,50],[50,300],[300,300]])
M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (cols, rows))

cv2.imshow('Input', img)
cv2.imshow('Output', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png
上一篇下一篇

猜你喜欢

热点阅读