我应该选择哪个版本的python opencv?

2024-10-01 17:32:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在成功地安装了带有python绑定的opencv2.0之后,我开始遇到麻烦了,在进一步讨论之前,我想知道是否应该更改为其他选项。正如ezod在这篇文章中所说:

“作为一个警告,从2.0版本开始,新的Python绑定是不完整的:许多我认为相当重要的函数缺失了。同时,SWIG绑定也让人很苦恼。从0.8.0版起,ctypes opencv绑定(第三方项目)不支持opencv 2.0。”

那么,我是应该继续使用2.0还是应该使用ctypes?我在这两方面都错过了什么?在

我使用的是OSX,Python2.5,我想在2d中跟踪运动对象,而不是python或机器视觉专家!在


Tags: 项目对象函数版本机器警告选项视觉
3条回答

迟交的答复。如果不必依赖于早期版本,并且希望在Python中使用OpenCV,请选择最新的稳定版本。今天它是opencv2.3.1。在

OpenCV≥2.3对Python用户的主要好处是:除了旧的(向后兼容的)cv模块之外,还有一个新的cv2模块。新的cv2模块更像python,不需要为中间数据结构手动分配内存。老^ {< CD2> }模块更像是C++翻译的直接翻译。在

例如,比较新的Pythoncv2.findContours(OpenCV≥2.3):

findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

它只需要三个参数,并且可以自动处理所有内存分配,只返回最终结果。只有一行用户代码。在

与旧的cv.FindContours

^{pr2}$

它要求用户在调用前显式地分配“存储空间”(+1或2行代码)。它不返回结果,而是将其保存在分配的存储中(它的工作方式类似于一个链表,用户必须编写一些循环才能真正从存储中提取数据)。总体而言,较低级别,更像C++ + Python。在通用用例中至少有4-5行代码,而不是只有一行带有新的cv2模块。在

<>我建议您使用the official Python bindings to OpenCV 2.1,正如我所看到的,它与C++库具有奇偶性。他们中的大多数都有Pythic包装,或者直接从C++版本翻译。在

Python的OpenCV文档并不像C++那样完整,但是如果你觉得原型开发的语言优势是值得的,那么你就能够从^ {A2}中了解Python用法。在

请注意,您将发现的许多现有示例代码都来自于以前的版本,并且是不兼容的(例如,现在所有代码都位于cv包下),但是不难发现如何更新它。在

我使用的是一个自编译的opencv2.0,它是内置的python绑定。到目前为止,我缺少2到3个函数(例如FindFundamentalMat)。如果您得到OpenCV的源代码,您会发现一个文本文件interfaces/python/api,它定义了python提供的每个OpenCV函数的参数和返回类型。重新编译后,自动生成器将解析此文件并构建python扩展。对于我经历过的所有案例,我发现为我需要的函数在api中添加适当的定义,然后重新编译opencv,效果非常好。在

相关问题 更多 >

    热门问题