我在迭代OpenCV Mat的坐标时遇到了问题
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.停留在宽度的三分之一左右。有什么想法吗?
发布于 2016-10-14 11:50:57
看上去你的深度图像有3个通道。
对于BW映像(B=G=R),所有通道的值都是相同的,所以您有BGRBGRBGR而不是GrayGrayGray,并且您试图访问它,因为它是一个通道,这就是为什么图像被水平拉伸了3次。
在运行循环之前尝试执行cv::cvtColor(depth,depth,COLOR_BGR2GRAY)。
发布于 2020-04-06 10:52:34
您的迭代代码是正确的。相反,错误的是cv::Mat depth类型假设。如所建议的,这可能是CV_U8C3根据扭曲。要获得这样一个CV_8UC3矩阵的像素值,可以使用:
cv::Vec3i depthValue = depth.at<cv::Vec3i>(y,x);那就用这个标量做你想做的事。例如,如果您的depth类型为CV_8UC3,其距离编码为两个第一个字节(MSB ),则可以使用以下方法获得距离:
float distance = depthValue[0] * 255 + depthValue[1];https://stackoverflow.com/questions/40042123
复制相似问题