2

ポイントクラウドを初期化するとしましょう。その RGB チャネルを opencv の Mat データ型に格納したいと考えています。どうやってやるの?

pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);   //Create a new cloud
pcl::io::loadPCDFile<pcl::PointXYZRGBA> ("cloud.pcd", *cloud);
4

3 に答える 3

1

ポイント クラウドの RGB 値のみに関心があり、その XYZ 値は気にしないということを正しく理解していますか?

次に、次のことができます。

pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>); 
//Create a new cloud
pcl::io::loadPCDFile<pcl::PointXYZRGBA> ("cloud.pcd", *cloud);

cv::Mat result; 

if (cloud->isOrganized()) {
    result = cv::Mat(cloud->height, cloud->width, CV_8UC3);

    if (!cloud->empty()) {

        for (int h=0; h<result.rows; h++) {
            for (int w=0; w<result.cols; w++) {
                pcl::PointXYZRGBA point = cloud->at(w, h);

                Eigen::Vector3i rgb = point.getRGBVector3i();

                result.at<cv::Vec3b>(h,w)[0] = rgb[2];
                result.at<cv::Vec3b>(h,w)[1] = rgb[1];
                result.at<cv::Vec3b>(h,w)[2] = rgb[0];
            }
        }
    }
}

基本的な考え方を示すだけで十分だと思います。

ただし、ポイントクラウドが整理されている場合にのみ機能します。

整理された点群データセットは、データが行と列に分割された、整理された画像 (またはマトリックス) のような構造に似た点群に付けられた名前です。このような点群の例には、ステレオ カメラや Time Of Flight カメラからのデータが含まれます。組織化されたデータセットの利点は、隣接するポイント (ピクセルなど) 間の関係を知ることにより、最近傍演算がはるかに効率的になり、計算が高速化され、PCL の特定のアルゴリズムのコストが削減されることです。(ソース)

于 2013-07-11T16:20:45.077 に答える
0

私は同じ問題を抱えており、それを解決することに成功しました!

まず、「地平面」が XOY 平面になるように座標を変換する必要があります。コア API はpcl::getTransformationFromTwoUnitVectorsAndOriginです。

あなたは私の質問を見ることができます:

幸運を!

于 2015-04-26T06:37:04.037 に答える