gar*_*rak 20 c++ python opencv image-processing
我目前正在使用FileStorage类来使用OpenCV C++ API 存储矩阵XML/YAML.
但是,我必须编写一个读取这些XML/YAML文件的Python脚本.
我正在寻找可以读取OpenCV C++ API生成的XML/YAML文件的现有OpenCV Python API
mpe*_*kov 21
您可以使用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)
Run Code Online (Sandbox Code Playgroud)
完成后,加载yaml文件很简单:
with open(file_name) as fin:
result = yaml.load(fin.read())
Run Code Online (Sandbox Code Playgroud)
结果将是一个dict,其中键是您在YAML中保存的任何名称.
除了@ misha的回复之外,OpenCV YAML与Python有些不兼容.
不兼容的几个原因是:
a: 2,而不是a:2Python]以下功能负责提供:
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")
Run Code Online (Sandbox Code Playgroud)
注意:以上回复仅适用于yaml's.XML有各自的问题,我还没有完全探讨过.
使用OpenCV 3.2中提供的FileStorage函数,我成功地使用了它:
import cv2
fs = cv2.FileStorage("calibration.xml", cv2.FILE_STORAGE_READ)
fn = fs.getNode("Camera_Matrix")
print (fn.mat())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11370 次 |
| 最近记录: |