深度复制不会生成数组的副本

时间:2019-06-05 15:16:54

标签: python python-3.x numpy deep-copy

我正在尝试使用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)

脚本的输出:

Output of the script

0 个答案:

没有答案