OpenCV - 从 C++ 到 Python 打开 XML 文件

Posted

技术标签:

【中文标题】OpenCV - 从 C++ 到 Python 打开 XML 文件【英文标题】:OpenCV - Open an XML file from C++ to Python 【发布时间】:2017-08-24 15:34:43 【问题描述】:

我正在做一个项目来提高我在 OpenCV 方面的技能,由于我是新手,所以我缺乏很多知识。在我的项目中,我在图像上检测到人脸,裁剪人脸区域,将其转换为灰度,使用 LBP 并使用 calcHist计算 LBP 图像的直方图。

我已使用 FileStorage 将所有这些直方图保存为 .xlm 文件。以上所有内容,在 Visual Studio 上使用 C++。现在我有一些机器学习算法的代码,如 SVM、神经网络、knn 等。但所有这些代码都在 Python 3 中。

我想到的下一步是获取所有这些 .xml 文件并将它们加载到 Python 脚本中,再次使用 OpenCV 来使用它们,但我无法做到最近几天的。

我尝试过的最简单的测试(来自 2017 年 7 月的帖子):

import cv2

fs = cv2.FileStorage("aa048t2aaunaff001.png_olbp.xml", cv2.FILE_STORAGE_READ)

fn = fs.getNode("Camera_Matrix")
print (fn.mat())

这里的问题:

1. fs 没有成员“getNode”。我在这里的安装做错了吗? 2. 打印输出“无”。

要加载的 XML 文件:https://drive.google.com/open?id=0B2TTkSDC13uQRk8tZlgxengzNW8

OpenCV:3.3.0,Python:3.6.2

找不到其他有效的方法,所以我发布了我尝试过的最简单的方法。感谢阅读,感谢您的帮助。

【问题讨论】:

试试help(fs)。看着那个,我想说fs['Camera_Matrix'] 就是你想要的。 似乎工作正常。 “帮助(fs)”确实有帮助。谢谢你的回答。 【参考方案1】:

由于我的帖子在大约 3 个月前得到了答复,但没有提供官方答复,因此我将回答我自己的问题。

我成功打开了我想要的文件,但我试图访问一个不存在的矩阵。我将fn = fs.getNode("Camera_Matrix") 更改为fn = fs.getNode("my_histrogram"),OpenCV 成功加载了直方图。

【讨论】:

以上是关于OpenCV - 从 C++ 到 Python 打开 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章

c++ 和 python 层之间的 opencv.groupRectangles() 差异

OpenCV 图像处理——C++ vs C vs Python

opencv C++代码到Python opencv代码的转换

将图像从 python 传输到 C++ 并返回

Tensorflow 对象检测在 Python 和 C++(OpenCV) 之间有不同的结果

将 C++ opencv 移植到 Python - 数组问题