13

几天前,我开始寻找一种制作简单计算机视觉系统的好方法。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

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

4

2 回答 2

9

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

实际上,有了新模块,OpenCV 与旧界面cv2相比变得更加简单。cv由于 Numpy 的支持,不仅简单,而且非常快速且高效。唯一的问题是,我们应该知道如何正确使用它。

在这里,您应该使用如下功能:

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

我希望您访问一个 SOF,它显示了两个模块之间的一些比较:所有这些 OpenCV Python 接口之间有什么不同?

另一个 SOF 在这里,这是一个关于如何使用 Numpy 支持加速代码的简单演示:OpenCV-Python 接口的性能比较,cv 和 cv2

尽管 C++ 是官方语言,但您无需学习 C++ 或 C 即可使用 OpenCV。尽管如此,Python-OpenCV 还是有很好的支持。一旦掌握了如何使用 OpenCV,您将能够自己将 C++ 代码转换为 Python。然后你也可以从 C++ 教程中学习 OpenCV。例如,我从完全使用 C++ 的 Gary Bradsky 的“Learning OpenCV”开始学习 OpenCV。那个时候只有cv界面。

正如您在评论中提到的,opencvpython.blogspot.com 有一些介绍性教程。我开始关注 OpenCV 中的新手。

此外,请查看此 SOF 以获取更多教程:OpenCV 和 Python 书籍?

于 2012-11-14T19:14:05.793 回答
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 的成员(在这里编码新手,如果我的一些词汇不准确,请原谅我),但并不总是相同。你有'CV_RGB2GRAY'。首先,没有引号。这是一个 cv“代码”而不是 cv2。你也错过了“简历”。在前。在这里演示一下我认为应该如何为旧 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 可能没有所需的时间来处理某些命令。好吧,这就结束了。抱歉,如果我涵盖了一些已经涵盖或引用的内容。如果我确实可以随意删除它,管理员。

于 2013-02-11T02:05:56.813 回答