根据this的答案B=A
,其中A
是一个numpy数组,B
应该指向同一对象A
。
import cv2
import numpy as np
img = cv2.imread('rose.jpeg')
print("img.shape: ", np.shape(img))
img2 = img
img = cv2.resize(img, (250,100))
print("img.shape: ", img.shape)
print("img2.shape:", img2.shape)
输出:
img.shape: (331, 500, 3)
img.shape: (100, 250, 3)
img2.shape: (331, 500, 3)
这似乎是一个非常基本的问题,但是我一直在为此挠头。有人可以解释一下它背后发生了什么吗?
答案 0 :(得分:1)
“问题”是您不是在这里使用numpy,而是在opencv上使用,而numpy array.resize()是就地opencv img.resize()则没有。
所以您打给
img = cv2.resize(img, (250,100))
创建具有给定大小的新对象(图像)。因此,这里的img变量将指向调用之前的另一个对象。
img2 = img
为原始对象添加一个新名称。此处img2和img指的是完全相同的对象/内存。
img = cv2.resize(img, (250,100))
cv2.resize(img, (250,100))
创建一个新对象,名称img
现在指向该新对象/内存。
print("img.shape: ", img.shape)
为您提供新对象的大小和
print("img2.shape:", img2.shape)
作为img2的原始对象的大小仍然引用原始对象。
用numpy的方式调用a = a.resize(...)
真的很糟糕-因为a
会被None
(resize
的返回值)而不是调整大小后的数组。在那里,您只需要a.resize(...)