首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OpenCV Python API的FileStorage

OpenCV Python API的FileStorage
EN

Stack Overflow用户
提问于 2012-06-21 23:18:00
回答 6查看 16.1K关注 0票数 20

我目前正在使用FileStorage类来存储矩阵XML/YAML使用OpenCV C++ API。

但是,我必须编写一个Python脚本来读取那些YAML/文件。

我正在寻找现有的OpenCV Python API,它可以读取由OpenCV C++ API生成的XML/YAML文件

EN

回答 6

Stack Overflow用户

发布于 2013-04-11 14:52:34

您可以使用PyYAML来解析YAML文件。

由于PyYAML不理解OpenCV数据类型,因此需要为试图加载的每种OpenCV数据类型指定一个构造函数。例如:

import yaml
def opencv_matrix(loader, node):
    mapping = loader.construct_mapping(node, deep=True)
    mat = np.array(mapping["data"])
    mat.resize(mapping["rows"], mapping["cols"])
    return mat
yaml.add_constructor(u"tag:yaml.org,2002:opencv-matrix", opencv_matrix)

完成后,加载yaml文件就很简单了:

with open(file_name) as fin:
    result = yaml.load(fin.read())

结果将是一个字典,其中的键是您在YAML中保存的任何内容的名称。

票数 22
EN

Stack Overflow用户

发布于 2016-02-23 17:07:09

除了@misha的响应之外,Python的响应与OpenCV有些不兼容。

不兼容的几个原因是:

由OpenCV创建的

  1. Yaml后面没有空格。而Python需要它。例如: Python
  2. 应该是a: 2,而不是a:2。OpenCV创建的YAML文件第一行错误。将"%YAML:1.0“转换为"%YAML 1.0”。或者在阅读时跳过第一行。

以下函数负责提供该功能:

import yaml
import re
def readYAMLFile(fileName):
    ret = {}
    skip_lines=1    # Skip the first line which says "%YAML:1.0". Or replace it with "%YAML 1.0"
    with open(scoreFileName) as fin:
        for i in range(skip_lines):
            fin.readline()
        yamlFileOut = fin.read()
        myRe = re.compile(r":([^ ])")   # Add space after ":", if it doesn't exist. Python yaml requirement
        yamlFileOut = myRe.sub(r': \1', yamlFileOut)
        ret = yaml.load(yamlFileOut)
    return ret

outDict = readYAMLFile("file.yaml")

注意:上面的响应只适用于yaml。XML也有自己的问题,我还没有完全研究过。

票数 8
EN

Stack Overflow用户

发布于 2017-07-28 22:12:47

通过使用OpenCV 3.2中提供的FileStorage函数,我已经成功地使用了以下代码:

import cv2
fs = cv2.FileStorage("calibration.xml", cv2.FILE_STORAGE_READ)
fn = fs.getNode("Camera_Matrix")
print (fn.mat())
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11141336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档