首页
学习
活动
专区
圈层
工具
发布

遍历Mat
EN

Stack Overflow用户
提问于 2016-10-14 11:31:20
回答 2查看 1.7K关注 0票数 0

我在迭代OpenCV Mat的坐标时遇到了问题

代码语言:javascript
复制
    cv::Mat picture = cv::Mat(depth.rows, depth.cols, CV_32F);

    for (int y = 0; y < depth.rows; ++y)
    {
        for (int x = 0; x < depth.cols; ++x)
        {
            float depthValue = (float) depth.at<float>(y,x);
            picture.at<float>(y, x) = depthValue;
        }
    }
    cv::namedWindow("picture", cv::WINDOW_AUTOSIZE);
    cv::imshow("picture", picture);

    cv::waitKey(0);

由此产生的图片:

(深度)

后(图)

它看起来是1.缩放,2.停留在宽度的三分之一左右。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-14 11:50:57

看上去你的深度图像有3个通道。

对于BW映像(B=G=R),所有通道的值都是相同的,所以您有BGRBGRBGR而不是GrayGrayGray,并且您试图访问它,因为它是一个通道,这就是为什么图像被水平拉伸了3次。

在运行循环之前尝试执行cv::cvtColor(depth,depth,COLOR_BGR2GRAY)

票数 4
EN

Stack Overflow用户

发布于 2020-04-06 10:52:34

您的迭代代码是正确的。相反,错误的是cv::Mat depth类型假设。如所建议的,这可能是CV_U8C3根据扭曲。要获得这样一个CV_8UC3矩阵的像素值,可以使用:

代码语言:javascript
复制
cv::Vec3i depthValue = depth.at<cv::Vec3i>(y,x);

那就用这个标量做你想做的事。例如,如果您的depth类型为CV_8UC3,其距离编码为两个第一个字节(MSB ),则可以使用以下方法获得距离:

代码语言:javascript
复制
float distance = depthValue[0] * 255 + depthValue[1];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40042123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档