所有这些OpenCV Python接口有什么不同?

  • opencv (来自OpenCV家伙的图书馆),
  • cv (来自OpenCV家伙的老图书馆)和
  • pyopencv与其前身ctypes-opencv

主要区别是什么?我应该使用哪一个?

正式的,OpenCV发布了两种types的Python接口, cvcv2

简历:

我开始研究cv 。 在此,所有的OpenCV数据types都被保留。 例如,加载时,图像格式为cvMat ,与C ++相同。

对于数组操作,有几个函数,如cvSet2DcvGet2D等。有些讨论说,它们更慢。

对于imageROI,你需要像cvSetImageROI这样的特殊function。

如果find轮廓,则返回cvSeq结构,与Python列表或NumPy数组相比,这不太适合。

(而且我认为它的开发很快就会停止了,之前只有cv ,后来OpenCV同时出现了cvcv2 ,现在在最新发布的版本中只有cv2模块,而cv是里面的子类cv2 。你需要调用import cv2.cv as cv来访问它。)

CV2:

最新的是cv2 。 在这里,所有的东西都会返回为NumPy对象,如ndarraynative Python对象,如liststuplesdictionary等等。所以,由于这个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 Pythoncv2模块的安装过程。