Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在与Python绑定的OpenCV中,为什么不调用NumPy函数就可以使用它?_Python_Arrays_Opencv_Numpy - Fatal编程技术网

在与Python绑定的OpenCV中,为什么不调用NumPy函数就可以使用它?

在与Python绑定的OpenCV中,为什么不调用NumPy函数就可以使用它?,python,arrays,opencv,numpy,Python,Arrays,Opencv,Numpy,例如,下面的简单代码: import cv2 import numpy as np image = cv2.imread(image.bmp) imageCopy = image.copy() 在上面的示例中,虽然我没有编写类似于np.copy(),但我只是使用NumPy模块中的一个函数复制了图像,这意味着我甚至没有从NumPy模块调用copy()函数。至少,这是我从微薄的知识中了解到的,因为我对这一点还是新手。为什么会这样?是不是因为OpenCV会自动使用NumPy模块(如果它是关于数组的

例如,下面的简单代码:

import cv2
import numpy as np

image = cv2.imread(image.bmp)
imageCopy = image.copy()

在上面的示例中,虽然我没有编写类似于
np.copy()
,但我只是使用NumPy模块中的一个函数复制了图像,这意味着我甚至没有从NumPy模块调用
copy()
函数。至少,这是我从微薄的知识中了解到的,因为我对这一点还是新手。为什么会这样?是不是因为OpenCV会自动使用NumPy模块(如果它是关于数组的)

您没有调用
np.copy
函数:您调用了
cv2.imread
返回的图像对象的复制方法


如果键入
print(dir(image))
,您可能会看到实际调用的copy方法。此方法可能(或不)使用<代码> NP.Image < /Cuff>函数进行自己的处理,但它在您的控件之外。< /P> do>代码>类型(图像)< /> >,我非常确信OpenCV返回NuPy数组,其中通常在C++中有一个<代码> Mat < /Cord>对象。因此您可以使用NumPy的ndarray方法,因为它是返回给您的ndarray。
.copy
是对象
图像的方法。查看Python中方法和函数之间的区别。@Jaime完成了它,它确实返回
。这意味着openCV将始终使用NumPy的ndarray方法?@hpaulj我已经看过了。基本上,方法是类的函数,不是吗?但我现在还是不能把它和我的困惑联系起来。基本上,模块cv2读取的对象“image”来自NumPy类?我真的不知道如何清楚地解释我的困惑。对不起将尝试对此进行更多研究。
cv2
也必须导入
numpy
,以供其自身使用,并创建此返回对象。完成了。获取一组列表,但未找到
np。复制
。但是通过键入printing
type(image)
,我得到了
。这是否意味着返回的值将始终使用NumPy方法,因为它是一个NumPy类型的对象?这意味着图像实际上是一个
NumPy.ndarray
。您将永远不会找到
np.copy
作为方法名,您将实际找到对象的复制方法(其全名为
numpy.ndarray.copy
,如本文所述:)好的,谢谢。我想这让我清醒了。我们将阅读更多关于此的信息。