有
opencv
(来自 OpenCV 家伙的库),cv
(来自 OpenCV 家伙的旧库)和pyopencv
与其前身ctypes-opencv
。
主要区别是什么,我应该使用哪一个?
OpenCV 正式发布了两种 Python 接口,cv
和cv2
.
简历:
我开始研究cv
. 在此,所有 OpenCV 数据类型都被保留。例如,加载时,图像是 format cvMat
,与 C++ 中的相同。
对于数组操作,有几个函数,如cvSet2D
,cvGet2D
等。有些讨论说,它们速度较慢。
对于 imageROI,您需要特殊功能,例如cvSetImageROI
.
如果您找到轮廓,cvSeq
则返回与 Python 列表或 NumPy 数组相比不太适合使用的结构。
(而且我认为,它的开发很快就会停止。之前,只有cv
. 后来,OpenCV 附带了cv
和cv2
。现在,在最新版本中,只有cv2
模块,并且cv
里面是一个子类cv2
。你需要调用import cv2.cv as cv
访问它。)
简历2:
而最新的是cv2
. 在这种情况下,所有内容都以NumPy
对象ndarray
和native Python
对象的形式返回,如lists
, tuples
,dictionary
等。因此,由于对 NumPy 的支持,您可以在此处执行任何 numpy 操作。NumPy
是一个高度稳定和快速的阵列处理库。
例如,如果您加载图像,ndarray
则会返回 an。
array[i,j]
为您提供 (i,j) 位置的像素值。
此外,对于 imageROI,可以使用数组切片,如ROI=array[c1:c2,r1:r2]
. 不需要单独的功能。
要添加两个图像,不需要调用任何函数,只需执行res = img1+img2
. (但 NumPy 加法是对像图像这样的 uint8 数组进行模运算。请参阅文章OpenCV 中的矩阵算术与 Numpy 之间的差异以了解更多信息。
返回的轮廓是 Numpy 数组的列表。您可以在Contours-1: Getting Started中找到关于 Contours 的详细讨论。
简而言之,使用 cv2 一切都被简化并且非常快。
cv2
在 Stack Overflow 问题OpenCV-Python 接口 cv 和 cv2 的性能比较中简单讨论了 NumPy 如何加速。
pyopencv:
我对这个了解不多,因为我没有使用过。但它似乎已经停止了进一步的发展。
我认为坚持使用官方图书馆会更好。
总之,我会推荐你使用 cv2!
编辑:您可以在Install OpenCV in Windows for Python 中查看cv2
模块的安装过程。