在与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。复制。但是通过键入printingtype(image)
,我得到了
。这是否意味着返回的值将始终使用NumPy方法,因为它是一个NumPy类型的对象?这意味着图像实际上是一个NumPy.ndarray
。您将永远不会找到np.copy
作为方法名,您将实际找到对象的复制方法(其全名为numpy.ndarray.copy
,如本文所述:)好的,谢谢。我想这让我清醒了。我们将阅读更多关于此的信息。