点云数据到垫数据
pointcloud data to mat data
我必须将 ply 数据转换为 mat 数据。为此,我使用了 pcl 的 plyreader 并将其转换为点云,现在我的下一步是将其转换为来自点云的垫数据。
我想我从 plyreader 获得的点云是无组织的。我一直在尝试提取点云的 xyz 值,然后将其复制到数据中。
pcl::PointCloud::Ptr云(新pcl::PointCloud);
// 创建一个新的点云 (POINTXYZ)
pcl::PLYReader reader;
reader.read(filename,*cloud); // read the ply file
cv::Mat output;
//...
output = cv::Mat(1,cloud->points.size(),CV_32FC3);
for(size_t i=0; i<cloud->points.size();++i)
{
int m = cloud->points[i].x;
int n = cloud->points[i].y;
int l = cloud->points[i].z;
float x0;
float x1;
float x2;
output.at<cv::Vec3f>(x0,x1,x2)= cv::Vec3f(m,n,l);
}
我知道错了。我找到了一个关于此的 post,但它是针对有组织的云 Link 在这里 -->
访问[pointcloud to mat]
Coversion from PointCloud to Mat
我是这个领域的新手。如果有人知道或可以帮助!!!
提前致谢
应该是:
output.at<cv::Vec3f>(1,i)[0] = cloud->points[i].x; //(1,i) is (row,col)
output.at<cv::Vec3f>(1,i)[1] = cloud->points[i].y; // [1] is y float
output.at<cv::Vec3f>(1,i)[2] = cloud->points[i].z;
cv::Size sz;
sz= cv::Size(cloud->width,cloud->height);
cv::Mat output(sz,CV_32FC3);
cvWaitKey(50);
for (int j=0; j<output.rows;++j)
{
for(int i= 0; i<output.cols;++i)
{
output.at<cv::Vec3f>(1,i)[0] = cloud->points[i].x;
output.at<cv::Vec3f>(1,i)[1] = cloud->points[i].y;
output.at<cv::Vec3f>(1,i)[2] = cloud->points[i].z;
}}
代码中没有错误并且运行正常,但仍然在 cv::Mat 输出中,值没有复制并给出了一些荒谬的结果。有谁知道错误或如何仅将输出值作为 cvmat 数据获取。
我必须将 ply 数据转换为 mat 数据。为此,我使用了 pcl 的 plyreader 并将其转换为点云,现在我的下一步是将其转换为来自点云的垫数据。 我想我从 plyreader 获得的点云是无组织的。我一直在尝试提取点云的 xyz 值,然后将其复制到数据中。
pcl::PointCloud::Ptr云(新pcl::PointCloud); // 创建一个新的点云 (POINTXYZ)
pcl::PLYReader reader;
reader.read(filename,*cloud); // read the ply file
cv::Mat output;
//...
output = cv::Mat(1,cloud->points.size(),CV_32FC3);
for(size_t i=0; i<cloud->points.size();++i)
{
int m = cloud->points[i].x;
int n = cloud->points[i].y;
int l = cloud->points[i].z;
float x0;
float x1;
float x2;
output.at<cv::Vec3f>(x0,x1,x2)= cv::Vec3f(m,n,l);
}
我知道错了。我找到了一个关于此的 post,但它是针对有组织的云 Link 在这里 -->
访问[pointcloud to mat]
Coversion from PointCloud to Mat
我是这个领域的新手。如果有人知道或可以帮助!!!
提前致谢
应该是:
output.at<cv::Vec3f>(1,i)[0] = cloud->points[i].x; //(1,i) is (row,col)
output.at<cv::Vec3f>(1,i)[1] = cloud->points[i].y; // [1] is y float
output.at<cv::Vec3f>(1,i)[2] = cloud->points[i].z;
cv::Size sz;
sz= cv::Size(cloud->width,cloud->height);
cv::Mat output(sz,CV_32FC3);
cvWaitKey(50);
for (int j=0; j<output.rows;++j)
{
for(int i= 0; i<output.cols;++i)
{
output.at<cv::Vec3f>(1,i)[0] = cloud->points[i].x;
output.at<cv::Vec3f>(1,i)[1] = cloud->points[i].y;
output.at<cv::Vec3f>(1,i)[2] = cloud->points[i].z;
}}
代码中没有错误并且运行正常,但仍然在 cv::Mat 输出中,值没有复制并给出了一些荒谬的结果。有谁知道错误或如何仅将输出值作为 cvmat 数据获取。