情境:我正在尝试使用point cloud
获取pcl::AdaptiveCostSOStereoMatching
,"compute"
使用两个已整理的图像(图片可以)。
我使用这些教程来学习如何做到这一点:
First tutorial
Second tutorial
错误:调用AdaptiveCostSOStereoMatching
"compute"
方法时,程序在运行时崩溃
问题:如何正确地将图片传递给"png2pcd.exe in.png out.pcd"
方法?
我试过:
1)由png2pcd转换的图像
(命令行: cv::Mat
)
2)使用以下void MatToPointCloud(Mat& mat, pcl::PointCloud<RGB>::Ptr cloud)
{
int width = mat.cols;
int height = mat.rows;
pcl::RGB val;
val.r = 0; val.g = 0; val.b = 0;
for (int i = 0; i < mat.rows; i++)
for (int j = 0; j < mat.cols; j++)
{
auto point = mat.at<Vec3b>(i, j);
//std::cout << j << " " << i << "\n";
val.b = point[0];
val.g = point[1];
val.r = point[2];
cloud->at(j, i) = val;
}
}
的功能转换的图像
但没有运气。
将cv :: Mat转换为pcl :: PointCloud
的函数 // Input
Mat leftMat, rightMat;
leftMat = imread("left.png");
rightMat = imread("right.png");
int width = leftMat.cols;
int height = rightMat.rows;
pcl::RGB val;
val.r = 0; val.g = 0; val.b = 0;
pcl::PointCloud<pcl::RGB>::Ptr left_cloud(new pcl::PointCloud<pcl::RGB>(width, height, val));
pcl::PointCloud<pcl::RGB>::Ptr right_cloud(new pcl::PointCloud<pcl::RGB>(width, height, val));
MatToPointCloud(leftMat, left_cloud);
MatToPointCloud(rightMat, right_cloud);
// Calculation
pcl::AdaptiveCostSOStereoMatching stereo;
stereo.setMaxDisparity(60);
//stereo.setXOffest(0); Почему-то не распознается
stereo.setRadius(5);
stereo.setSmoothWeak(20);
stereo.setSmoothStrong(100);
stereo.setGammaC(25);
stereo.setGammaS(10);
stereo.setRatioFilter(20);
stereo.setPeakFilter(0);
stereo.setLeftRightCheck(true);
stereo.setLeftRightCheckThreshold(1);
stereo.setPreProcessing(true);
stereo.compute(*left_cloud, *right_cloud); // <-- CRASHING THERE
stereo.medianFilter(4);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr out_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
stereo.getPointCloud(318.11220, 224.334900, 368.534700, 0.8387445, out_cloud, left_cloud);
pcl :: AdaptiveCostSOStereoMatching(compute)
AdaptiveCostSOStereoMatching
错误信息:
输出日志:HEAP [App.exe]:
堆积在0000006B0F828460处修改为0000006B0F8284A8过去要求的尺寸为38
App.exe已触发断点。
left_cloud (右侧云看起来像left_cloud )
迷你问题:如果ACSSM
真的允许来自2张图片的构建点云,.
如何在没有不确定和繁琐参数的情况下执行此操作?
答案 0 :(得分:0)
问题:我在没有.ics
的情况下下载并安装了旧版PCL
之后,我从其他PCL包下载了stereo
并将此库添加到我的PCL包中。它工作不正确。
解决方案:我已填写stereo
,我的程序现已合适。
操作系统:PCL 1.8
IDE :Windows
如果您尝试编译PCL,这些链接可以帮助您:
Official-tutorial-1
Official-tutorial-2
Good help with FLANN and VTK