用Python加载OpenCV XML文件时出错

2024-04-20 12:06:04 发布

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

我使用的是OpenCV 2.4.1和python2.7(在Visual Studio Python工具下运行的EPD 7.3)。我正在尝试使用OpenCV Load()函数读取xml文件:

import cv2
import numpy as np

reprojectionError=cv2.Load("calib.xml")

但我有个错误:

    reprojectionError=cv2.Load("calib.xml")
AttributeError: 'module' object has no attribute 'Load'
Press any key to continue . . .

有什么想法吗?


Tags: 文件工具函数importnumpyasloadxml
3条回答

我也有同样的错误。在搜索之后,我在OpenCV bug tracker中找到了一些关于它的讨论。从他们的讨论中,我了解到的是(当然,还有很多东西我无法理解,比如一些编码等),OpenCV只加载有效的xml文件。

有效的方法是,它应该是一些OpenCV结构,如IplImage、cvSeq等,否则会抛出一些错误。

当我试图加载haarcascade xml文件时,它返回了NULL。

TypeError: OpenCV returned NULL

当我试图加载一些任意的xml时(从某个地方获得,与OpenCV无关):

error: The node does not represent a user object (unknown type?)

最后,我加载了一个图像,使用cv.Save将其保存在xml文件中,并尝试按如下方式加载:

import cv2
import numpy as np

img = cv2.cv.LoadImage('0.jpg',0)
cv2.cv.Save('sof.xml',img)
e=cv2.cv.Load("sof.xml")

print e

我得到了以下正确的结果:

<iplimage(nChannels=1 width=300 height=300 widthStep=300 )>

所以我从这些例子和bug tracker的讨论中了解到OpenCV只加载包含有效OpenCV结构的xml文件。(这是个不错的选择。为什么OpenCV要尝试加载所有的xml文件呢?它只能打开与之相关的文件)。

这就是我所知道的。希望有帮助!!!

加载haarcascade_frontalface_default.xml文件时出现了相同的错误。 所以我从下面的链接下载了所需的文件

https://code.google.com/p/jviolajones/downloads/detail?name=haarcascade_frontalface_default.xml

将它粘贴到特定位置,在代码中给出正确的路径,然后成功运行代码

我发现我可以使用python cv(而不是cv2)API的load()从cv校准应用程序保存的XML文件中加载相机矩阵和失真系数。必须指定文件名,以及该文件中对象的名称。

import cv
import numpy

calib_filename = '/path/to/my/output/of/calibration.xml'

camera_matrix = numpy.asarray(cv.Load(calib_filename, cv.CreateMemStorage(), 'camera_matrix'))
dist_coeffs = numpy.asarray(cv.Load(calib_filename, cv.CreateMemStorage(), 'distortion_coefficients'))

注意numpy.as array()中的wrap,将cv.Load()返回的CvMat转换为一个numpy数组,cv2样式,因为它看起来像是您试图在cv2中工作(就像我一样)。

在Linux上的OpenCV2.4.3,Python2.7中为我工作。

相关问题 更多 >