正式来说,OpenCV发布两种类型的Python接口cv和cv2。
简历:
我开始工作在cv。在这一点上,所有OpenCV数据类型都被保留。例如,加载时,图像的格式为cvMat,与C中的相同。
对于数组操作,有几个函数,如cvSet2D,cvGet2D等。有些讨论说,他们慢。
对于imageROI,您需要特殊的功能,如cvSetImageROI。
如果找到轮廓,则返回与Python列表或NumPy数组相比不太好的cvSeq结构。
(我认为,很快它的开发就会停止,早些时候只有cv。后来,OpenCV同时带有cv和cv2。现在,在最新版本中,只有cv2模块,cv是一个子类cv2。你需要调用import cv2.cv作为cv来访问它。)
cv2:
最新的一个是cv2。在这里,一切都返回为NumPy对象,如ndarray和原生的Python对象,如列表,元组,字典等。所以由于这个NumPy支持,你可以在这里做任何numpy操作。 NumPy是一个高度稳定和快速的数组处理库。
例如,如果加载图像,则返回ndarray。
array [i,j]给出在(i,j)位置的像素值。
此外,对于imageROI,可以使用阵列切片,如ROI = array [c1:c2,r1:r2]。无需单独的功能。
要添加两个图像,没有必要调用任何函数,只需执行res = img1 img2。 (但NumPy加法是像图像的uint8数组的模运算。有关更多信息,请参阅文章Difference between Matrix Arithmetic in OpenCV and Numpy。
返回的轮廓是Numpy数组的列表。您可以在Contours – 1 : Getting Started找到有关轮廓的详细讨论。
简而言之,使用cv2,一切都简化和快速。
pyopencv:
我不知道很多,因为我没有使用它。但似乎已停止进一步发展。
我认为最好坚持官方图书馆。
总之,我建议你使用cv2!