gpt4 book ai didi

opencv - 从视差图中获取平面点云

转载 作者:太空宇宙 更新时间:2023-11-03 21:51:50 25 4
gpt4 key购买 nike

我一直在尝试从一对校正后的立体图像生成点云。我首先使用opencv的sgbm实现获得视差图。然后我使用以下代码将其转换为点云,

[for (int u=0; u < left.rows; ++u)
{
for (int v=0; v < left.cols; ++v)
{
if(disp.at<int>(u,v)==0)continue;
pcl::PointXYZRGB p;
p.x = v;
p.y = u;
p.z = (left_focalLength * baseLine * 0.01/ disp.at<int>(u,v));
std::cout << p.z << std::endl;
cv::Vec3b bgr(left.at<cv::Vec3b>(u,v));
p.b = bgr\[0\];
p.g = bgr\[1\];
p.r = bgr\[2\];
pc.push_back(p);
}
}][1]

left为左图,disp为cv_16s中的输出视差图。我对 pcl 转换的差异是正确的还是差异值有问题?

我附上了视差图、点云和原始左图的屏幕截图。

谢谢!

screenshot

最佳答案

我对这种语言没有信心,但我注意到一件事:
假设这条线将disparty转换为深度(Z)

p.z = (left_focalLength * baseLine * 0.01/ disp.at<int>(u,v));

什么是 0.01?如果此计算为您提供从 1 到 10 的深度 (Z) 范围,则该系数会将您的范围从 0.01 减小到 0.1。深度总是接近于零并且你有一个平面图像(平面图像=恒定深度)。

PS 我在您的代码中没有看到从 u,v 像素值到 Z 值的 X,Y 转换。有点像

X = u*Z/f

关于opencv - 从视差图中获取平面点云,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517429/

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