Python图像处理(六)——图像缩放、图像旋转、图像翻转、图像平移

一、图像缩放

图像缩放主要使用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()

输出结果如下所示:

Python图像处理(六)——图像缩放、图像旋转、图像翻转、图像平移_第1张图片

(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度,输出结果如下所示:

Python图像处理(六)——图像缩放、图像旋转、图像翻转、图像平移_第2张图片

如果设置-90度,则核心代码和图像如下所示。

M = cv2.getRotationMatrix2D((cols/2, rows/2), -90, 1)
rotated = cv2.warpAffine(src, M, (cols, rows))

输出结果如下所示:

 

Python图像处理(六)——图像缩放、图像旋转、图像翻转、图像平移_第3张图片

三、图像翻转

图像翻转在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()

输出结果如下所示:

Python图像处理(六)——图像缩放、图像旋转、图像翻转、图像平移_第4张图片

四、图像平移

图像平移首先定义平移矩阵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()

输出结果如下所示:

Python图像处理(六)——图像缩放、图像旋转、图像翻转、图像平移_第5张图片

 

你可能感兴趣的:(opencv,python)