所有这些 OpenCV Python 接口之间有啥不同?

Posted

技术标签:

【中文标题】所有这些 OpenCV Python 接口之间有啥不同?【英文标题】:What is different between all these OpenCV Python interfaces?所有这些 OpenCV Python 接口之间有什么不同? 【发布时间】:2012-05-12 03:00:59 【问题描述】:

opencv(来自 OpenCV 的库), cv(来自 OpenCV 家伙的旧库)和 pyopencv 及其前身 ctypes-opencv

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

【问题讨论】:

【参考方案1】:

OpenCV 官方发布了两种 Python 接口,cvcv2

简历:

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

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

对于 imageROI,您需要像 cvSetImageROI 这样的特殊函数。

如果找到轮廓,则返回 cvSeq 结构,与 Python 列表或 NumPy 数组相比,它不太好处理。

(而且我想,它的开发很快就会停止。之前,只有cv。后来,OpenCV 附带了cvcv2。现在,在最新版本中,只有cv2 模块,而cvcv2 内部的子类。您需要调用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] 一样使用数组切片。不需要单独的函数。

要添加两个图像,不需要调用任何函数,只需执行res = img1+img2。 (但 NumPy 加法是对图像等 uint8 数组进行模运算。请参阅文章 Difference between Matrix Arithmetic in OpenCV and Numpy 了解更多信息。

返回的轮廓是 Numpy 数组的列表。您可以在 Contours - 1 : Getting Started 中找到有关轮廓的详细讨论。

简而言之,有了 cv2,一切都得到了简化,而且速度非常快。

关于 NumPy 如何加速 cv2 的简单讨论在 Stack Overflow 问题中Performance comparison of OpenCV-Python interfaces, cv and cv2

pyopencv

我对这个了解不多,因为我没有使用它。但它似乎已经停止了进一步的开发。

我觉得还是坚持官方图书馆比较好。

简而言之,我会推荐你​​使用 cv2!

编辑:您可以在 Install OpenCV in Windows for Python 中查看cv2 模块的安装过程。

【讨论】:

cv2 如果您从源代码构建 OpenCV,将编译和安装 Python 接口。如果您使用 Linux 或其他操作系统的二进制包,您应该查阅您的操作系统/分发文档。请参阅goo.gl/MUjXi 寻求帮助。 @Framester:请参阅此链接中 cv2 的安装过程:opencvpython.blogspot.in/2012/05/… Abid 的回答很棒。再补充一点:我做了a project with Python 3.x,我可以访问opencv的唯一方法是通过ctypes_opencv和原始的OpenCV 1.0。它声称支持 OpenCV pre1.1,但我从来没有让它工作。这样,您将使用原始的 cvSetROI 等 C 类型接口。 如果你想用 pip 安装它。阅读here 或做:pip install opencv-python

以上是关于所有这些 OpenCV Python 接口之间有啥不同?的主要内容,如果未能解决你的问题,请参考以下文章

javacv跟opencv有啥区别

Keras 和 TensorFlow 中所有这些交叉熵损失之间有啥区别?

接口和抽象之间有啥区别以及依赖注入如何[重复]

图像的opencv中以下两行之间有啥区别

openni,opencv,opengl这三个到底是啥?有啥关系?做啥用?

opencv-python 库和 cv2 库有啥区别?