gpt4 book ai didi

c++ - OpenCV 从 Mat 访问元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:18 24 4
gpt4 key购买 nike

我正在尝试学习 OpenCV,作为一个顽固的人,我正在尝试运行以下算法:

 cv::Mat cur_features;
cv::goodFeaturesToTrack(current_image, cur_features, 400, 0.01, 0.01);

现在,作为一个头脑冷静的人,我很想看看 cur_features 持有什么......我期待一个 400x2 cv::Mat 但我得到了一个 400x1 cv::Mat

没什么大不了的,我想它可能是一个直接索引。但是,对于我的一生,我无法从 cur_features.at(0) 中提取一个值并将其打印出来。

我做错了什么?我看过 goodFeaturesToTrack_Demo.cpp。该演示中需要注意的一些事项与我的有所不同。鉴于该示例,我尝试了以下调用:

 std::cout << cur_features.size() << std::endl; // This throws a compile time error even though its in the example
std::cout << cur_features.at<Point2f>(0).x << std::endl; //This throws a run time error.

任何人都可以指导我查看一些说明如何实现我的目标的文档吗? goodFeaturesToTrack 告诉您它返回一个 OutputArray,它是一个角 vector ,但它没有描述这些角的类型。如果我用其他方法得到这个答案,我会在文档的什么地方寻找它?


编辑:另外,Mat::type() 的意义何在。我找不到可以解释返回值的位置...我正在文档中查找枚举,但找不到它。

 std::cout << current_image.type() << std::endl; //This returns 0
std::cout << cur_features.type() << std::endl; //This returns 13

最佳答案

作为建议,尝试用维度和类型初始化矩阵

 cv::Mat cur_features(400,1,CV_32_FC1); //400x1 32 bits, 1 channel
cv::Mat cur_features2(400,1,CV_32_FC2); //400x1 32 bits, 2 channels

获取Mat的值

int pos = 0;
foat value = cur_features.at<float>(pos);
cv::Vec2f value2 = cur_features2.at<Vec2f>(pos); // for a two channel, CV_23F image

还有一种方便的 Visual Studio 调试技术对我帮助很大

  • 1- 调试时右键单击 cur_features。
  • 2- 快速观察
  • 3- 写下:

    (float*)cur_features.data,400

  • 4- 你会看到数组的所有值

关于c++ - OpenCV 从 Mat 访问元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10957022/

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