图像缩放主要使用resize函数
result = cv2.resize(src, dsize[, result[. fx[, fy[, interpolation]]]])
其中src表示原始图像,dsize表示缩放大小,fx和fy也可以表示缩放大小倍数,他们两个(dsize或fx\fy)设置一个即可实现图像缩放
代码如下:
import cv2
#读取图片
image = cv2.imread("E:/pythonProject/xin.jpeg")
#图片缩放
image1 = cv2.resize(image, (200,200))
#图片显示
cv2.imshow("resize", image1)
cv2.imshow("image", image)
#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下所示:
(200,200)是将图像缩放的倍数,如何将两张大小不一的图片缩放到相同大小,请参考上一篇博客:https://blog.csdn.net/AI_girl/article/details/114544941?spm=1001.2014.3001.5501
图像旋转主要调用getRotationMatrix2D()函数和warpAffine()函数实现,绕图像的中心旋转
- M = cv2.getRotationMatrix2D((cols/2, rows/2), 30, 1)
参数分别为:旋转中心、旋转度数、scale
- rotated = cv2.warpAffine(src, M, (cols, rows))
参数分别为:原始图像、旋转参数、原始图像宽高
代码如下:
import cv2
#输入图片
image = cv2.imread("E:/pythonProject/xin.jpeg")
#原图像的高、宽、通道数
rows, cols, chnl = image.shape
#旋转参数:旋转中心,旋转角度,scale
M = cv2.getRotationMatrix2D((cols/2, rows/2), 60, 1 )
#参数:原始图像,旋转参数,元素图像宽高
rotated = cv2.warpAffine(image, M, (cols, rows))
#图像显示
cv2.imshow("image", image)
cv2.imshow("rotated", rotated)
#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
旋转60度,输出结果如下所示:
如果设置-90度,则核心代码和图像如下所示。
M = cv2.getRotationMatrix2D((cols/2, rows/2), -90, 1)
rotated = cv2.warpAffine(src, M, (cols, rows))
输出结果如下所示:
图像翻转在OpenCV中调用函数flip()实现
dst = cv2.flip(src, flipCode)
其中src表示原始图像,flipCode表示翻转方向,如果flipCode为0,则以X轴为对称轴翻转,如果fliipCode>0则以Y轴为对称轴翻转,如果flipCode<0则在X轴、Y轴方向同时翻转
代码如下所示:
import cv2
import matplotlib.pyplot as plt
#读取图片
image = cv2.imread("E:/pythonProject/xin.jpeg")
scr = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
#图像翻转
#0以X轴对称翻转,>0以Y轴对称翻转,<0以X轴Y轴同时翻转
image1 = cv2.flip(scr, 0)
image2 = cv2.flip(scr, 1)
image3 = cv2.flip(scr, -1)
#图像显示
titles = ["image", "image1", "image2", "image3"]
images = [scr, image1, image2, image3]
for i in range(4):
plt.subplot(2,2,i+1), plt.imshow(images[i])
plt.xticks([]), plt.yticks([])
plt.title(titles[i])
plt.show()
输出结果如下所示:
图像平移首先定义平移矩阵M,再调用warpAffine()函数实现平移
- M = np.float32([[1, 0, x], [0, 1, y]])
- shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
image.shape[1],image.shape[0],分别指的是原始图像的宽、高
代码如下所示:
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
scr = cv2.imread("E:/pythonProject/xin.jpeg")
image = cv2.cvtColor(scr, cv2.COLOR_BGR2RGB)
rows, cols, chnl = image.shape
#图片上,下,做,右平移
M = np.float32([[1, 0, 0], [0, 1, 100]])
image1 = cv2.warpAffine(image, M, (cols, rows))
M = np.float32([[1, 0, 0], [0, 1, -100]])
image2 = cv2.warpAffine(image, M, (cols, rows))
M = np.float32([[1, 0, 100], [0, 1, 0]])
image3 = cv2.warpAffine(image, M, (cols, rows))
M = np.float32([[1, 0, -100], [0, 1, 0]])
image4 = cv2.warpAffine(image, M, (cols, rows))
#图像显示
tieles = ["image1", "image2", "image3", "image4"]
images = [image1, image2, image3, image4]
for i in range(4):
plt.subplot(2, 2, i+1), plt.imshow(images[i])
plt.xticks([]), plt.yticks([])
plt.title(tieles[i])
plt.show()
输出结果如下所示: