我正在尝试使用OpenCV旋转和平移图片。图片存储在对象“原始”中。我尝试了多种方法来创建该原始文档的深拷贝,因为我想要3张不同的图片:一张经过翻译的图片,一张旋转的图片以及一张经过翻译然后旋转的图片。但是,如果我启动代码,只会先旋转同一张图片,然后再进行翻译,最后再次进行翻译和旋转。
我试图在没有改变结果的新对象中读取原始图像。令人惊讶的是,仍然可以使用pyplot显示原始图像。我真的不明白这里是什么问题。
from __future__ import print_function
import numpy as np
import cv2
from matplotlib import pyplot as plt
import numpy as np
def rotate(image, angle):
rows,cols = image.shape[:2]
M = cv2.getRotationMatrix2D((cols/2,rows/2),angle,1)
return cv2.warpAffine(image, M, (cols, rows))
def translate(image, x, y):
rows,cols = image.shape[:2]
M = np.float32([[1,0,x],[0,1,y]])
return cv2.warpAffine(img,M,(cols,rows))
from copy import deepcopy
original = cv2.imread("Darth.jpg")
original2 = deepcopy(original)
original3 = deepcopy(original)
print(original.shape)
img = rotate(original, 15)
cv2.imwrite("Darth1.jpg", img)
img_trans= translate(original2, 20, 20)
cv2.imwrite("Darth2.jpg", img_trans)
img_trans_rot= rotate(translate(original3, 20, 20), 30)
cv2.imwrite("Darth3.jpg", img_trans_rot)
fig=plt.figure(figsize=(18, 16), dpi= 80, facecolor='w', edgecolor='k')
plt.subplot(1,4,1)
plt.imshow(original)
plt.subplot(1,4,2)
plt.imshow(img)
plt.subplot(1,4,3)
plt.imshow(img_trans)
plt.subplot(1,4,4)
plt.imshow(img_trans_rot)
脚本的输出: