所有这些OpenCV Python接口有什么不同?
有
-
opencv
(来自OpenCV家伙的图书馆), -
cv
(来自OpenCV家伙的老图书馆)和 -
pyopencv
与其前身ctypes-opencv
。
主要区别是什么?我应该使用哪一个?
正式的,OpenCV发布了两种types的Python接口, cv
和cv2
。
简历:
我开始研究cv
。 在此,所有的OpenCV数据types都被保留。 例如,加载时,图像格式为cvMat
,与C ++相同。
对于数组操作,有几个函数,如cvSet2D
, cvGet2D
等。有些讨论说,它们更慢。
对于imageROI,你需要像cvSetImageROI
这样的特殊function。
如果find轮廓,则返回cvSeq
结构,与Python列表或NumPy数组相比,这不太适合。
(而且我认为它的开发很快就会停止了,之前只有cv
,后来OpenCV同时出现了cv
和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]
一样使用arrays分片。 不需要单独的function。
要添加两个图像,不需要调用任何函数,只需要res = img1+img2
。 (但是NumPy加法是像图像这样的uint8数组的模运算。请参阅文章OpenCV和Numpy中的matrix运算之间的区别以了解更多信息。
返回的轮廓是Numpy数组列表。 您可以find轮廓轮廓的详细讨论– 1:入门 。
简而言之,所有的简化和相当快。
关于NumPy如何加速cv2
简单讨论是堆栈溢出问题OpenCV-Python接口cv和cv2的性能比较 。
pyopencv :
因为我没有用过,所以对这个我不太了解。 但似乎停止了进一步的发展。
我认为坚持官方图书馆会更好。
总之,我会build议你使用cv2!
编辑:你可以看到安装OpenCV在Windows for Python的cv2
模块的安装过程。