質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

2138閲覧

tsukuba画像から3角メッシュを作成したいです。

mypace

総合スコア45

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/12/14 02:23

tsukuba画像から、デプス画像を作成し、PCL(PointCloudLibrary)にて点群データ(下画像)を表示しました。
イメージ説明
点群データから3角メッシュを作成し、stlファイル作成を行いたいのですが、
以下コードのgp3.reconstruct(triangles); にて処理がずっと続く状態になり、
以降の処理が実行されません。
GreedyProjectionTriangulationの設定変更でtrianglesが作成できるようになるでしょうか?
また、加えたほうがいい処理や、triangles作成方法などがございましたらご教授いただきたく思います。

C++

1//3角メッシュ作成 2void ImageProc::MashMake(pcl::PointCloud<pcl::PointXYZ> &cloud) { 3 4 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>(cloud)); 5 //--- 3角メッシュ作成 ---// 6 pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n; //各点でのローカルサーフェスの法線と曲率推定 7 //pcl::NormalEstimationOMP<pcl::PointXYZ, pcl::Normal> n; //各点でのローカルサーフェスの法線と曲率推定 8 pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>); //法線情報格納変数 9 pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>); //探索木変数 10 tree->setInputCloud(cloud_ptr); 11 n.setInputCloud(cloud_ptr); //法線計算を行う点群指定 12 //n.setRadiusSearch(10.00); 13 n.setSearchMethod(tree); //検索方法指定 14 n.setKSearch(20); // 15 n.compute(*normals); //法線情報の出力計算 16 17 //--- stl facet 設定値抽出 ---// 18 float x_normal = normals->points[0].normal[0]; //法線面ベクトル x値 19 float y_normal = normals->points[0].normal[1]; //法線面ベクトル y値 20 float z_normal = normals->points[0].normal[2]; //法線面ベクトル z値 21 //--- stl 座標抽出 ---// 22 //float point_capa = cloud.points.capacity.size; 23 // << 法線面計算に使用する3点の頂点座標を取得したい。>> // 24 25 float x_point = cloud.points[0].x; 26 float y_point = cloud.points[0].y; 27 float z_point = cloud.points[0].z; 28 //--- stl 法線作成時の座標を取得 ---// 29 30 31 //Make Normaltype PointCloud. 32 pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>); 33 pcl::concatenateFields(*cloud_ptr, *normals, *cloud_with_normals); //2つのデータセットを結合 34 //Create search tree & Iniializing Object. 35 pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>); 36 tree2->setInputCloud(cloud_with_normals); 37 pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3; //initialize 三角形屁の分割 38 pcl::PolygonMesh triangles; 39 //Setting parameter. // Set the maximum distance between connected points (maximum edge length) 40 gp3.setSearchRadius(1.000); 41 // Set typical values for the parameters 42 gp3.setMu(500.0); //異なる点密度適応のための探索半径を求める 43 gp3.setMaximumNearestNeighbors(10); // 44 gp3.setMaximumSurfaceAngle(M_PI / 4); // 45 degrees 45 gp3.setMinimumAngle(M_PI / 18); // 10 degrees 46 gp3.setMaximumAngle(2 * M_PI / 3); // 120 degrees 47 gp3.setNormalConsistency(false); 48 //Measure Triangle. Get result 49 gp3.setInputCloud(cloud_with_normals); 50 gp3.setSearchMethod(tree2); 51 gp3.reconstruct(triangles); 52 // Additional vertex information 53 std::vector<int> parts = gp3.getPartIDs(); 54 std::vector<int> states = gp3.getPointStates(); 55 //メッシュを表示する 56 pcl::io::saveVTKFile("MeshTest.vtk", triangles); 57 58 //--- PLDファイル作成 ---// 59 pcl::io::savePCDFileASCII("PDC.pcd", cloud); 60 pcl::io::savePolygonFileSTL("MeshTest.stl", triangles, false); 61 62}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問