chatgpt关于reprojectImageTo3D函数生成三维点云的解答

是这样的,有个同学有个图像用AD-Census算完视差,想借助视差图生成点云,找到的函数是reprojectImageTo3D。

我测试的时候图方便,将视差图直接用cv::imwrite保存成图片,用这个图片生成点云。免得每次都算一遍视差花好多时间(保存成的视差图片格式是CV_8U)

用opencv的reprojectImageTo3D函数用来生成点云文件,但是点云一直有问题。

问了gpt发现

 给出的2个解决方法:

第一个

 //disparity为CV_8U的视差图

//CV_8U类型转换为CV_16S类型。然后,我们使用reprojectImageTo3D函数将disparity_16s转换为三维点云xyz

cv::Mat disparity_16s;

cv::Mat depth, xyz;

// 将CV_8U格式的视差图像转换为CV_16S类型

disparity.convertTo(disparity_16s, CV_16S);

// 使用reprojectImageTo3D函数生成三维点云

cv::reprojectImageTo3D(disparity_16s, xyz, Q, true);

第二个

 //disparity为CV_8U的视差图

//CV_8U类型转换为CV_32F类型。然后,我们使用reprojectImageTo3D函数将disparity_f转换为三维点云xyz

cv::Mat disparity_16s, disparity_f;
cv::Mat depth, xyz;

// 将CV_8U类型的视差图像转换为CV_16S类型
disparity.convertTo(disparity_16s, CV_16S);

// 将CV_16S类型的视差图像转换为浮点型视差图像
disparity_16s.convertTo(disparity_f, CV_32F, 1.0 / 16.0);

// 使用reprojectImageTo3D函数生成三维点云
cv::reprojectImageTo3D(disparity_f, xyz, Q, true);

// 将三维点云转换为深度图像
cv::extractChannel(xyz, depth, 2);

对于disparity_16s.convertTo(disparity_f, CV_32F, 1.0 / 16.0);中

参数1.0 / 16.0,chatgpt是这样解释的:

  应该可以理解为根据实际的点云计算情况,从点云的结果对这个比例因子调参吧哈哈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值