我使用PyYAML读取文件,python代码是:
with open('demo.yml') as f:
dataMap = yaml.load(f)
演示.yml:
%YAML:1.0
my_svm: !!opencv-ml-svm
svm_type: C_SVC
kernel: { type:LINEAR }
C: 1.
那么错误是:
yaml.scanner.ScannerError: while scanning a directive
in "demo.yml", line 1, column 1
expected alphabetic or numeric character, but found ':'
in "demo.yml", line 1, column 6
有人帮助我吗?
指令应为
%YAML 1.0
(不带冒号)。您还需要一个“文档开始”(---
) 将指令与文档分开。例如:
%YAML 1.0
---
my_svm: !!opencv-ml-svm
svm_type: C_SVC
kernel: { type: LINEAR }
C: 1.
可以修改opencv 3.0创建的yaml文件 来自 opencv 的文件 1:
1 %YAML:1.0
2 my_svm: !!opencv-ml-svm
3 svm_type: C_SVC
4 kernel: { type:LINEAR }
5 C: 1.
6 ...
文件2:
1 my_svm: opencv-ml-svm
2 svm_type: C_SVC
3 kernel: { type: LINEAR }
4 C: 1.
5 ...
文件1 -> 文件2:
然后您可以使用
yaml.load(filename)
加载数据。
使用cv2.FileStorage
import cv2
fs = cv2.FileStorage(file_path, cv2.FILE_STORAGE_READ)
fn = fs.getNode("my_svm")
print(fn) # use fn.mat() it contains matrix
这对我有用:
from cv2 import cv
import numpy as np
filepath = "test.yml"
matrixA = np.array( cv.Load(filepath, cv.CreateMemStorage(), "matrixA") )
matrixB = np.array( cv.Load(filepath, cv.CreateMemStorage(), "matrixB") )
print "matrixA:", matrixA
print "matrixB:", matrixB
见: http://xudongai.blogspot.jp/2013/08/how-to-use-python-to-load-opencv-yml.html