gpt4 book ai didi

c++ - 将 Mat 转换为关键点?

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

我正在将描述符(SurfDescriptorExtractor 输出)和关键点(SurfFeatureDetector 输出)写入一个 XML 文件。在编写关键点 (std::vector) 到 Mat 的转换之前完成(如下:convert keypoints to mat or save them to text file opencv)。因为描述符不是必需的,它们已经是 Mat 了。所以都保存为Mat,读取也没有问题。但是当使用 FlannBasedMatcher,然后使用 drawMatches 时,此方法需要关键点数据。

问题是:如何将 Mat 转换为 Keypoint 的 vector ,哪种方法最好?

最佳答案

这就是 opencv source code 的方式在 Java 中进行转换,我在 C++ 中找不到此转换,它可能不存在。您也许可以将其翻译成 C++,它不是很复杂。

 //Code from Opencv4Android: utils/Converters.java
public static void Mat_to_vector_KeyPoint(Mat m, List<KeyPoint> kps) {
if (kps == null)
throw new java.lang.IllegalArgumentException("Output List can't be null");

int count = m.rows();
if (CvType.CV_64FC(7) != m.type() || m.cols() != 1)
throw new java.lang.IllegalArgumentException(
"CvType.CV_64FC(7) != m.type() || m.cols()!=1\n" + m);

kps.clear();
double[] buff = new double[7 * count];
m.get(0, 0, buff);

for (int i = 0; i < count; i++) {
kps.add(new KeyPoint((float) buff[7 * i], (float) buff[7 * i + 1], (float) buff[7 * i + 2], (float) buff[7 * i + 3],
(float) buff[7 * i + 4], (int) buff[7 * i + 5], (int) buff[7 * i + 6]));
}
}

关于c++ - 将 Mat 转换为关键点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14898540/

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