OpenCV 2.4.3和Python

时间:2012-11-14 15:14:56

标签: python opencv

几天前,我开始寻找一种制作简单计算机视觉系统的好方法。 OpenCV库是我需要的东西,但事实证明用Python学习很难,特别是在OpenCV 2.4.3更新之后,它有非常纤薄的Python相关文档。所以我现在明白OpenCV中有很多变化,例如

import cv

现在是

import cv2

还有许多模块缺失。我的意思是,是的,有新的python-opencv语法的例子,但它非常狭窄,并且被证明很难理解。 例如: Python代码的官方文档中的示例

cv2.cvtColor(src, code[, dst[, dstCn]])

我知道这段代码的含义以及如何使用它,至少我想我知道。但是编写源代码和颜色代码并没有给我带来任何好处:

    Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', 'CV_RGB2GRAY')
TypeError: an integer is required

或者,如果我尝试编写类似变量的代码:

Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', CV_RGB2GRAY)
NameError: name 'CV_RGB2GRAY' is not defined

对于最新的OpenCV,是否有任何与Python相关的参考文档/教程/书籍/指南,其基础解释不会让像我这样的新手与C ++或Java的不需要的代码示例混淆?

2 个答案:

答案 0 :(得分:9)

我认为你正在采取相反的方式。

实际上,使用新的cv2模块,与旧的cv接口相比,OpenCV变得更加简单。由于Numpy的支持,不仅简单,而且速度快,效率高。唯一的问题是,我们应该知道如何恰当地使用它。

在这里,你应该使用如下函数:

img = cv2.imread('pic.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

我希望您访问一个SOF,其中显示了两个模块之间的比较:What is different between all these OpenCV Python interfaces?

另一个SOF就在这里,这是一个关于如何使用Numpy支持加速代码的简单演示:Performance comparison of OpenCV-Python interfaces, cv and cv2

虽然C ++是官方语言,但您无需学习C ++或C来使用OpenCV。不过,Python-OpenCV还是有很好的支持。一旦掌握了如何使用OpenCV,您就可以自己将C ++代码转换为Python。然后你也可以从C ++教程学习OpenCV。例如,我开始从Gary Bradsky的“Learning OpenCV”学习OpenCV,它完全是用C ++编写的。那时,只有cv接口。

正如您在评论中提到的,opencvpython.blogspot.com有一些入门教程。我开始专注于OpenCV中的新手。

另外,请查看此SOF以获取更多教程:Books for OpenCV and Python?

答案 1 :(得分:4)

从另一个角度来看它,并允许您使用新的OpenCV安装版本运行旧代码......

首先从cv迁移到cv2与使用不同数据结构的库有很多功能。判断函数是否在cv2和cv之间发生变化的最简单方法是cv函数以大写字母开头。重写的cv2函数似乎总是以小写字母表示第一个字母。因此,如果您使用旧书或旧示例,您仍然可以使用旧版cv。 cv现在只是嵌入在cv2中。只需在脚本顶部使用以下内容

即可
    import cv2
    import cv2.cv as cv #required for old code not to be changed

这使您可以简单地运行旧代码而无需更改它。我将在这里演示您的函数调用。你有......

    cv.cvtColor('proba.jpg', 'CV_RGB2GRAY')

我注意到的第一件事是你的功能可能被称为错误。 (鉴于函数的第一个字母是小写,它应该以cv2而不是cv开头)。第二个是你传递函数的'代码'。对于cv2和cv,'代码'是成员(编码noob在这里,请原谅我,如果我的一些词汇是不准确的),但并不总是相同。你有'CV_RGB2GRAY'。首先,没有报价。这是一个cv'代码'而不是cv2。你也错过了'cv。'在前。为了演示这里我是如何相信你的函数应该为旧的cv版本调用:

    cv.CvtColor('proba.jpg', cv.CV_RGB2GRAY) #Assuming you used listed imports
    cv2.cv.CvtColor('proba.jpg', cv2.cv.CV_RGB2GRAY) #Assuming you skipped second import

现在cv2 ......

    cv2.cvtColor('proba.jpg', cv2.COLOR_RGB2GRAY)

你去了,我希望这会有所帮助。请记住,给定python运行脚本,您可以直接在命令行中键入任何不确定的内容。这对于帮助我建立理解(我5天前第一次使用python)确实很奇怪。例如,如果您想知道为什么它需要函数中的整数,那么当您键入

    cv.CV_RGB2GRAY

直接进入python命令行,它会向你吐出'7'(方便它是一个int)。 cv2版本吐出'7L'。只需记住现在以某种形式再次使用WaitKey()函数,否则在某些情况下,highgui可能没有处理某些命令所需的时间。好吧,它包装起来。很抱歉,如果我介绍了一些已经涵盖或参考过的内容。如果我确实随意删除它,管理员。