有
opencv
(来自OpenCV团队的库),cv
(来自OpenCV的老图书馆)和pyopencv
和它的前身ctypes-opencv
。
主要区别是什么,我应该使用哪一个?
Answers:
OpenCV正式发布了两种类型的Python接口,cv
和cv2
。
简历:
我开始工作cv
。这样,所有OpenCV数据类型都将保留下来。例如,加载后,图像的格式cvMat
与C ++中的相同。
对于数组操作,有几个功能,如cvSet2D
,cvGet2D
等。而一些讨论说,他们是慢。
对于imageROI,您需要特殊的功能,例如cvSetImageROI
。
如果找到轮廓,cvSeq
则返回的结构与Python列表或NumPy数组相比不太好用。
(而且我认为,不久以后它将停止开发。之前,只有cv
。后来,OpenCVcv
和and一起提供了cv2
。现在,在最新版本中,只有cv2
模块,并且cv
里面是子类cv2
。您需要调用import cv2.cv as cv
访问它。)
cv2:
而最新的是cv2
。在此,一切都返回NumPy
状物体ndarray
和native Python
物体像lists
,tuples
,dictionary
等,所以由于这个NumPy的支持,你可以在这里做任何numpy的操作。NumPy
是一个高度稳定和快速的数组处理库。
例如,如果加载图像,ndarray
则返回。
array[i,j]
为您提供(i,j)位置的像素值。
同样,对于imageROI,可以像一样使用数组切片ROI=array[c1:c2,r1:r2]
。无需单独的功能。
要添加两个图像,无需调用任何函数,只需执行即可res = img1+img2
。(但是NumPy加法是uint8数组(如图像)的模运算。有关更多信息,请参见《OpenCV中的矩阵算术和Numpy之间的区别》。
返回的轮廓是Numpy数组的列表。您可以在“轮廓-1:入门”中找到有关轮廓的详细讨论。
简而言之,使用cv2可以简化所有步骤,而且速度非常快。
cv2
在堆栈溢出问题OpenCV-Python接口cv和cv2的性能比较中,对NumPy如何加快速度进行了简单讨论。
pyopencv:
我对此不太了解,因为我没有使用过它。但它似乎已停止进一步发展。
我认为坚持使用官方图书馆会更好。
简而言之,我建议您使用cv2!
编辑:您可以在Windows for Pythoncv2
中的安装OpenCV中看到模块的安装过程。