Python 和 OpenCV - 为什么经过 OpenCV 处理的裁剪图像仍然可以影响原始图像?
Python and OpenCV - Why a processed with OpenCV cropped image can still effect the original image?
我正在使用 Python 和 OpenCV 3 进行图像处理。
所以,我裁剪了这样一张图片:
image = cv2.imread('image_path')
cropped = image[0:100, 0:100]
当我使用 cropped
作为函数的参数时,即我检测 cropped
中的边缘,应用霍夫变换然后在其上画一条线,我注意到同样的线也绘制到原来的 image
。这是为什么?
这是否意味着 cropped
图像仍然以某种方式连接到原始 image
?
切片的opencv图像数据是具有不同几何形状的参考,而不是副本。它们是 numpy 数组。来自 http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing 的 numpy 文档:
All arrays generated by basic slicing are always views of the original
array.
要强制它成为副本,请使用 cropped=np.array(image, copy=True)[0:100, 0:100]
。
我正在使用 Python 和 OpenCV 3 进行图像处理。
所以,我裁剪了这样一张图片:
image = cv2.imread('image_path')
cropped = image[0:100, 0:100]
当我使用 cropped
作为函数的参数时,即我检测 cropped
中的边缘,应用霍夫变换然后在其上画一条线,我注意到同样的线也绘制到原来的 image
。这是为什么?
这是否意味着 cropped
图像仍然以某种方式连接到原始 image
?
切片的opencv图像数据是具有不同几何形状的参考,而不是副本。它们是 numpy 数组。来自 http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing 的 numpy 文档:
All arrays generated by basic slicing are always views of the original array.
要强制它成为副本,请使用 cropped=np.array(image, copy=True)[0:100, 0:100]
。