我应该选择哪种版本的python opencv?
使用python绑定成功安装opencv 2.0后,我开始遇到麻烦,在我进一步探讨之前,我想知道是否应该更改为其他选项。 正如这篇文章的ezod所说:
“作为一个警告,从2.0版本开始,新的Python绑定是不完整的:我认为很多函数都是相当重要的,同时,SWIG绑定也没什么可用的,ctypes-opencv绑定(第三方项目),从版本0.8.0开始,不支持OpenCV 2.0。“
那么,我应该用2.0还是士兵呢,还是应该去ctypes? 我在两种方式中错过了什么?
我使用的是OSX,python 2.5,并希望在2D中跟踪移动对象,既不是蟒蛇也不是机器视觉专家!
我使用的是自编译的OpenCV 2.0,它是内置的python绑定。 到目前为止,我缺少2或3个功能(例如FindFundamentalMat)。 如果您获得OpenCV的源代码,您会找到一个文本文件interfaces / python / api ,它定义了Python中可用的每个OpenCV函数的参数和返回类型。 重新编译时,自动生成器将解析这个文件并构建python扩展。 对于我经历过的所有情况,我发现为api添加一个合适的定义给我需要的函数,然后重新编译opencv,效果很好。
答案很晚。 如果您不需要依赖较早的版本,并且想要使用Python的OpenCV,请选择最新的稳定版本。 今天它是OpenCV 2.3.1。
Python用户的cv2
的主要好处是:除旧版(向后兼容) cv
模块外,新版cv2
模块。 新的cv2
模块更加cv2
,不需要为中间数据结构分配手动内存。 旧的cv
模块更像是直接翻译C ++ API。
例如,比较新的Python cv2.findContours
( cv2.findContours
):
findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy
它只需要三个参数,并且可以自动处理所有内存分配,只返回最终结果。 只有一行用户代码。
比。 旧的cv.FindContours
:
FindContours(image, storage [, mode [, method [, offset]]]) -> None
它要求用户在呼叫之前明确分配“存储”(+ 1或2行代码)。 它不会返回结果,而是将其保存在分配的存储中(它像链接列表一样工作,用户必须编写一些循环才能真正从存储中提取数据)。 总的来说,更低层次,更像C ++而不是Python。 在常见用例中至少有4-5行代码,而不是只有一行新的cv2
模块。
我建议你使用官方的Python绑定到OpenCV 2.1,就我所见,它具有与C ++库功能相同的功能。 他们大多数都有pythonic包装,或从C ++版本直接翻译。
Python的OpenCV文档并不像C ++那样完整,但如果您认为原型的语言优势是值得的,那么您将能够从C ++文档中理解Python的用法。
请注意,现有示例代码中的很多代码都来自以前的版本,并且不兼容(例如,现在所有的代码均位于cv
包中),但不难理解如何更新它。
上一篇: Which version of python opencv should I go for?
下一篇: MVVM with WPF using LINQtoSQL in a DAL along with a BLL