Python and OpenCV - 为啥用 OpenCV 处理的裁剪图像仍然可以影响原始图像?

Posted

技术标签:

【中文标题】Python and OpenCV - 为啥用 OpenCV 处理的裁剪图像仍然可以影响原始图像?【英文标题】:Python and OpenCV - Why a processed with OpenCV cropped image can still effect the original image?Python and OpenCV - 为什么用 OpenCV 处理的裁剪图像仍然可以影响原始图像? 【发布时间】:2016-04-03 22:16:16 【问题描述】:

我正在使用 Python 和 OpenCV 3 进行图像处理。

所以,我裁剪了这样的图像:

image = cv2.imread('image_path')
cropped = image[0:100, 0:100]

当我使用cropped 作为函数的参数时,即检测cropped 中的边缘,应用霍夫变换然后在其上画一条线,我注意到同样的线也被绘制到原来的image。这是为什么? 这是否意味着cropped 图像仍以某种方式连接到原始image

【问题讨论】:

【参考方案1】:

切片的opencv图像数据是具有不同几何形状的参考,而不是副本。它们是 numpy 数组。来自http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing 的 numpy 文档:

基本切片生成的所有数组始终是原始视图 数组。

要强制它成为副本,请使用cropped=np.array(image, copy=True)[0:100, 0:100]

【讨论】:

谢谢!直截了当,非常容易理解的解释!

以上是关于Python and OpenCV - 为啥用 OpenCV 处理的裁剪图像仍然可以影响原始图像?的主要内容,如果未能解决你的问题,请参考以下文章

为啥OpenCV for Python的cv2.HoughLines的返回值需要用索引来访问?

为啥用Python的openCV读取图片与PIL读取的图片像素值会不一样?

opencv中自带的dll和lib 为啥不能直接使用?

Python文档阅读笔记-Number Plate Recognition with OpenCV and EasyOCR

write之后为啥read不出来 为啥?

为啥 OpenCV 的 MSER 的 Python 实现和 Java 实现会产生不同的输出?