gpt4 book ai didi

opencv - 在OpenCV中将深度图像从毫米转换为米

转载 作者:行者123 更新时间:2023-12-02 16:58:01 32 4
gpt4 key购买 nike

这看起来真的很容易,但是我在处理OpenCV图像时遇到了错误。输入图像是具有CV_16UC1编码的深度图像(深度值以毫米为单位)。我想将深度值转换为米,如下所示-

auto img_m = img_mm * 0.001f; // convert to meter (SI units)
最后,我需要几个像素的深度值。因此,我通过以下方式使用 mat.at()函数-
// let say we want to get the depth value at (0, 0)
int pixel_x = 0;
int pixel_y = 0;
auto depth = img_m.at<unsigned short>(pixel_y, pixel_x);
不幸的是,它显示以下编译错误-
error: ‘class cv::MatExpr’ has no member named ‘at’
auto depth = img_m.at<unsigned short>(pixel_y, pixel_x);
出于好奇,我检查了两张图片的数据类型,发现以下内容:
std::cout << "cvtype(img_mm): " << img_mm.type() << std::endl;
std::cout << "size(img_mm): " << img_mm.size() << " size(img_m): " << img_m.size() << std::endl;
std::cout << "type(img_mm): " << typeid(img_mm).name() << " type(img_m): " << typeid(img_m).name() << std::endl;

cvtype(img_mm): 2
size(img_mm): [640 x 480] size(img_m): [640 x 480]
type(img_mm): N2cv3MatE type(img_m): N2cv7MatExprE
在这里,我们可以看到img_mN2cv7MatExprE,这导致了编译错误。
作为一种解决方法,我将深度值乘以以下方法,而不是将 img_mm转换为 img_m:
auto depth_mm = img_mm.at<unsigned short>(pixel_y, pixel_x);
auto depth_m = depth_mm * 0.001f; // convert to meter (SI units)
但是,我想知道为什么标量乘法会变得疯狂!!!
以下是环境详细信息-
  • Ubuntu 14.04 LTS操作系统
  • ROS Indigo(ROS附带的默认OpenCV)
  • OpenCV 2.4.8
  • CMAKE_CXX_COMPILER_VERSION 4.8.5
  • 最佳答案

    您正在使用auto来让编译器推断img_m的类型,然后编译器将其正确推断为cv::MatExpr。将cv::Mat与sclalar相乘会生成cv::MatExpr,可以将其转换为cv::Mat。为了避免这个问题,您应该为img_m指定类型:

    cv::Mat img_m = img_mm * 0.001f; // convert to meter (SI units)

    关于opencv - 在OpenCV中将深度图像从毫米转换为米,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64352365/

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