Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python加载OpenCV XML文件时出错_Python_Opencv - Fatal编程技术网

用Python加载OpenCV XML文件时出错

用Python加载OpenCV XML文件时出错,python,opencv,Python,Opencv,我使用的是OpenCV 2.4.1和Python 2.7(在VisualStudioPython工具下运行的焓EPD 7.3)。我正在尝试使用OpenCV Load()函数读取xml文件: import cv2 import numpy as np reprojectionError=cv2.Load("calib.xml") 但我得到了一个错误: reprojectionError=cv2.Load("calib.xml") AttributeError: 'module' obj

我使用的是OpenCV 2.4.1和Python 2.7(在VisualStudioPython工具下运行的焓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 . . .

有什么想法吗?

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

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

当我尝试加载haarcascade xml文件时,它返回NULL

TypeError: OpenCV returned NULL
当我尝试加载一些任意xml时(从某处获得,与OpenCV无关):

最后,我加载了一个图像,使用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文件呢?它只需要打开与它相关的文件)


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

我发现我可以使用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.asarray()中使用wrap将cv.Load()返回的CvMat转换为numpy数组,即cv2样式,因为它看起来像是在尝试在cv2中工作(我也是)


在Linux上的OpenCV 2.4.3和python 2.7中为我工作。

我也有类似的问题。我在发布模式下使用了debug libs,所以它给出了错误。当我将debug lib(xd.lib)更改为release lib(x.lib)时,它工作了


Sinan

我在加载haarcascade_frontalface_default.xml文件时遇到了相同的错误。 所以我只是从下面的链接下载了所需的文件


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

opencvio在Python中目前相当糟糕。我相信当前的主文件在FileNode下,但是文档现在不存在。据推测,您应该使用Numpy中的标准方法(因为OpenCV mats在Python中以Numpy数组的形式公开)

cv
模块也已弃用,因此
Load
不再存在

无论如何,这里有一个从OpenCV XML文件加载Mat的快速函数。我放弃了让它与OpenCV协同工作的尝试,使用解析器更简单:

import xml.etree.ElementTree as ET
import numpy as np

def load_from_opencv_xml(filename, elementname, dtype='float32'):
    try:
        tree = ET.parse(filename)
        rows = int(tree.find(elementname).find('rows').text)
        cols = int(tree.find(elementname).find('cols').text)
        return np.fromstring(tree.find(elementname).find('data').text, dtype, count=rows*cols, sep=' ').reshape((rows, cols))
    except Exception as e: 
        print(e)
        return None

应该覆盖C++中保存的东西的大多数用法:

cv::FileStorage right_fs("right_calibration.xml", cv::FileStorage::WRITE);
right_fs << "cameraMatrix" << right_camera_matrix;
right_fs.release();
cv::FileStorage right\u fs(“right\u calibration.xml”,cv::FileStorage::WRITE);

是的,你试过cv2.cv.Load还是cv2.core.Load?是的,看来我必须使用cv2.cv.Load。这篇文章也与此相关:现在我得到了一个不同的错误:
OpenCV错误:未知函数中的未指定错误(节点不代表用户对象(未知类型?),文件C:\slave\wininstallermagapack\src\OpenCV\modules\core\src\persistence.cpp,第4961行
我试图加载的XML文件实际上是由OpenCV生成的有效XML(第一行是
。此文件包含相机校准数据,它是由使用OpenCV的第三方应用程序生成的。查看OpenCV文档,似乎我应该能够使用
文件存储
类加载它,但是我没有看到任何Python绑定…也许我应该使用通用的Python XML库?很抱歉,我对此不太了解。关于这个问题有什么消息吗?有没有办法用python加载包含cvmat序列的XML文件?您能与我们共享您代码的相关部分,以便其他用户可以看到适合您的解决方案?
cv::FileStorage right_fs("right_calibration.xml", cv::FileStorage::WRITE);
right_fs << "cameraMatrix" << right_camera_matrix;
right_fs.release();