所有这些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模块的安装过程。