gpt4 book ai didi

java - 将 opencv 矩阵转换为字符串以存储在 Android 数据库中的最佳方法(Java)

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:23 24 4
gpt4 key购买 nike

我想将随机 OpenCV 描述符提取器生成的描述符矩阵存储为数据库实体。

假设desc是描述符矩阵

String s = (desc.reshape(1,1)).dump;

为了从数据库中取回矩阵,我做了

Mat desc = new Mat(numberOfRows * numberOfCols * numberOfChannels, 1, type);
/* I stored number of rows and number of cols and type of the matrix separately and pass them to the function that returns the matrix */
String ss[] = s.substring(1, s.length -1).split(", ");
int[] temp = new int[sss.length ];
for(int i = 0; i < sss.length; i++) temp [i] = Integer.parseInt(sss[i]);
MatOfInt int_values = new MatOfInt(temp);
int_values.convertTo(desc, type);
desc = fingerprint.desc(numberOfChannels, numberOfRows);

这工作正常但需要花费大量时间,尤其是 .split 方法和涉及 parseInt 的循环,因为矩阵中有大量元素(在我的例子中大约有 100k)。

我的问题是:是否有更好的方法来做到这一点?

我的第二个问题是,来吧,分配一个 100K 长的字符串数组并解析它(考虑到字符串实际上最多是 2-3 个字符的事实)真的不需要 2 秒,是因为 Android/Java很慢

最佳答案

OpenCV 提供了 FileStorage 类用于持久化,如 link .基本上 Mat 图像可以保存为 XML/YAML 文件,我们稍后可以从中读取。一个简单的例子如下。

//for writing
cv::FileStorage store(“save.yml", cv::FileStorage::WRITE);
store << “mat” << img;
store.release();

//for reading
cv::FileStorage store(“save.yml", cv::FileStorage::READ);
store[“mat”] >> img;
store.release();

但我们在 Android 中没有 FileStorage java 包装器。替代方案可以通过 JNI 调用上面的代码,如 example 中所示甚至更好 - 查看 Berak 的 sample .

关于java - 将 opencv 矩阵转换为字符串以存储在 Android 数据库中的最佳方法(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27433261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com