使用Python和OpenCV时,“import cv”和“import opencv.cv”有什么区别?

3 投票
2 回答
6564 浏览
提问于 2025-04-16 08:01

我正在尝试用Python使用OpenCV,并把一些C++的代码转换过来。不管怎样,如果我这样写:

import cv
img = cv.LoadImage('image.jpg')

是可以的。或者:

import opencv.cv as opcv
size = opcv.cvSize(40, 50)

但是,不管怎样,cv模块里没有cvSize这个数据结构,而opencv.cv里也没有LoadImage这个功能。那么,每个模块到底有什么呢?我试着查阅文档,但找不到相关信息。我是应该这样使用,还是我的设置有问题?

2 个回答

0

在这里:

import cv 

你是在从Python的模块搜索目录中导入cv模块。这意味着你可能导入了一个不同版本的cv模块,它可能存放在opencv包安装目录之外,就像在这个例子中一样。

而在这里:

import opencv.cv

你是明确地导入了opencv包里的cv版本,也就是在opencv包安装目录中的那个版本。这样做几乎可以确保你使用的就是opencv包里的版本,这种方式和使用以下语法是一样的:

from opencv import cv
2

其实真正的答案是 :) “import opencv.cv” 和 “from opencv import cv” 这两种写法都是旧的导入方式。

自从 OpenCV 2.0 版本开始,使用了新的 Python 导入方式,你应该用的写法是这样的:

# import only cv, no opencv
# this also brings in sub modules such as highgui
import cv
# no "cv" prepended before all method names
src_mat = cv.LoadImageM('yourfilename.png', cv.CV_LOAD_IMAGE_GRAYSCALE)
# let's show the image in a window
cv.NamedWindow('your name', 1)
cv.ShowImage('your name', src_mat)
cv.WaitKey

旧的导入方式是通过 SWIG 工具实现的,而新的导入方式,根据 opencv 2.2 的源代码来看,似乎是自己制作的。

撰写回答