- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 C++ 中,OpenCV 有一个很好的 FileStorage
使保存和加载 Mat 变得轻而易举的类。
这很简单
//To save
FileStorage fs(outputFile, FileStorage::WRITE);
fs << "variable_name" << variable;
//To load
FileStorage fs(outputFile, FileStorage::READ);
fs["variable_name"] >> variable;
文件格式为 YAML。
我想使用我用 Java 中的 C++ 程序创建的 Mat
,理想情况下,从保存的 YAML 文件加载它。但是,我在 Java 绑定(bind)中找不到与 FileStorage
等效的类。有吗?如果没有,我还有什么选择?
最佳答案
一种可能的解决方案是使用 Java 库编写 YAML 解析器,例如 yamlbeans或snakeyaml 。
我选择使用yamlbeans,因为默认的FileStorage编码是YAML 1.0,而snakeyaml需要1.1。
我的C++代码
FileStorage fs(path, FileStorage::WRITE);
fs << "M" << variable;
保存以下示例 YAML 文件
%YAML:1.0
codebook: !!opencv-matrix
rows: 1
cols: 3
dt: f
data: [ 1.03692314e+02, 1.82692322e+02, 8.46153831e+00 ]
删除 header “%YAML:1.0”后,我可以使用将其加载到 Java 中
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import net.sourceforge.yamlbeans.YamlException;
import net.sourceforge.yamlbeans.YamlReader;
public class YamlMatLoader {
// This nested class specifies the expected variables in the file
// Mat cannot be used directly because it lacks rows and cols variables
protected static class MatStorage {
public int rows;
public int cols;
public String dt;
public List<String> data;
// The empty constructor is required by YamlReader
public MatStorage() {
}
public double[] getData() {
double[] dataOut = new double[data.size()];
for (int i = 0; i < dataOut.length; i++) {
dataOut[i] = Double.parseDouble(data.get(i));
}
return dataOut;
}
}
// Loading function
private Mat getMatYml(String path) {
try {
YamlReader reader = new YamlReader(new FileReader(path));
// Set the tag "opencv-matrix" to process as MatStorage
// I'm not sure why the tag is parsed as
// "tag:yaml.org,2002:opencv-matrix"
// rather than "opencv-matrix", but I determined this value by
// debugging
reader.getConfig().setClassTag("tag:yaml.org,2002:opencv-matrix", MatStorage.class);
// Read the string
Map map = (Map) reader.read();
// In file, the variable name for the Mat is "M"
MatStorage data = (MatStorage) map.get("M");
// Create a new Mat to hold the extracted data
Mat m = new Mat(data.rows, data.cols, CvType.CV_32FC1);
m.put(0, 0, data.getData());
return m;
} catch (FileNotFoundException | YamlException e) {
e.printStackTrace();
}
return null;
}
}
关于java - 如何在 Java 中加载使用 FileStorage 保存的 OpenCV 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34297676/
我有一个 .xlsx 文件,并将其转换为 .csv 文件。然后我将 .csv 文件上传到我编写的 Python 脚本中,但抛出错误。 由于文件是通过 HTTP 上传的,因此我使用 file = req
我正在使用 Flask、WTForms 和 Flask-WTF 来保存文件,但该文件始终存储为空文件。它没有显示任何错误。 表格: from flask_wtf import FlaskForm fr
我正在尝试使用 Django 中的文件存储。一切正常,但我想我的保存方法有问题。我有一个带有 FileField 的模型 download_url = models.FileField(verbose
我曾经在 opencv c++ 中使用过 FileStorage 类,它非常有用,但我找不到如何在 opencv python 中使用它。请帮我。谢谢 最佳答案 `import cv2 import
我正在尝试编写一个文件(json/yaml/xml,格式无关紧要)来存储具有特定 cv::Mat 的文件路径。当我最终意识到 here ,组合键不允许路径(例如/home/user)。 void pe
是否有类似类的东西可以用来存储文件和目录,就像 Zip 文件的使用方式一样? 因为我还没有找到任何“真正的”类来编写 Zip 文件(真正的类,如 真正的 类),如果能够将文件和目录存储在类似容器的文件
我通过 flask 制作了一个 api,它提交了一个文件,在后端收到它之后,我想使用 python requests 进一步将它上传到一个未知的服务器模块 如果我这样做,服务器会接受文件 - requ
我基本上是在读取 OpenCV FileNode 中的几个字段,进行一些计算,然后用计算的数据仅替换原始 OpenCV FileNode 中的一个字段。 我找不到任何允许我这样做的方法。有没有人这样做
我正在尝试使用 OpenCV 库将多个值写入 XML 文件。 我正在尝试保存我在项目中使用的结构之一: if (validCalib) { QString calpath = path() +
我正在尝试使用 OpenCV FileStorage 类从 YAML 文件中读取一些数据,但是 VS 2013 给出了 Run-Time Check Failure #2 - Stack around
我用这样的数据编写 vector : string filename= itemName+".yml"; FileStorage fs(filename, FileStorage::WRITE); f
我想使用 opencv FileStorage 对象编写一个 XML 文件。 我看到的大多数示例都像下面这样工作 FileStorage fs("d:\\1.xml" , FileStorage::W
我在 flask 应用程序中有以下路由,它接受上传的文件并将文件对象扔到函数中进行验证。这是一个准系统示例: def is_file_valid(file): if file.filename
我已使用 cv::FileStorage 成功将大小为 (10,10, CV_32F24) 的 Mat 保存到文本文件中。但是,当我尝试使用 cv::FileStorage 再次加载/读取它时,它失败
我正在尝试将“cv::FileStorage”中包含的内容“读取”到 CvRTrees(CvStatModel 实现之一)中。 “读取”函数需要一个 CvFileStorage* 和一个 CvFile
我有一个用 Xcode 编写的命令行 openCV 程序,它打开两个 XML 文件,分析然后比较它们。但是,我现在正尝试使用 QtCreator 将该程序放入 GUI 中,以便更容易理解输出。 问题是
我正在尝试实现 this项目,即 GenData.cpp,(用 C++ 编写)在 Java 中用于 KNN 分类器。 我遇到了这些代码行并卡住了: matClassificationInts.push
我在让 (x,y) = x+y; } } std::cout #include int _tmain(int argc, _TCHAR* argv[]) { cv::Mat test
我已经能够使用 FileStorage 成功地将关键点( vector )、描述符(Mat)和其他内容写入 yml 文件。但是,在我计算出一对图像之间的匹配项后,我无法将匹配项写入文件。 我假设这是因
我想使用 cv::FileStorage 类将我的 MarkerDistance 结构写入文件。 我尝试以各种方式重载 << 运算符,但它无法编译。而且我不确定到底出了什么问题。如果有人能指出正确的方
我是一名优秀的程序员,十分优秀!