ベクトル添え字の範囲外問題の解の1つ
元のアドレス:http://www.pclcn.org/bbs/forum.php?mod=viewthread&tid=589
<スパン 今日デバッグモードデバッグ次のコードは、常に範囲外のベクトルの添え字をプロンプトが、以下のリリースでは問題ありません。チェックした後、この代入文のためcloud_filtered = cloud_f;、これらの2つは、点群オブジェクト変数へのポインタなので、値の割り当て、彼らはすべてのオブジェクトを指して、pclで:ExtractIndices< pcl::PointXYZRGB> extract; 内部フィルタリング、問題ないの最初のラウンド、ベクトルのアウトオブバウンド問題の第二ラウンド、違いをよく見てみると2ポインタの最初のラウンドは別の点群オブジェクトに指していることである。そして後者は、ExtractIndicesこのクラス内の関数pcl::ExtractIndices<PointT>:で、1つを指している。 applyFilter (PointCloud & output) there is a copyPointCloud (*input_, indices, output);, in this sentence, corresponding in and out inside is the same object, look at IO's pcl::copyPointCloud (const pcl::PointCloud<PointT> &cloud_in, const std:: vector<int> &indices.Index); in the same object is the same function is the same function,
pcl::PointCloud<PointT> &cloud_out) 関数は、cloud_out.points.resize (indices.size (); で、サイズを変更する、このプログラムは、ちょうど外側のポイントを排除するので、それは小さいのサイズを変更すると同時に cloud_in のサイズです。 cloud_out のサイズは、。 points[i] = cloud_in.points[indices[i]]; を変更してから cloud_out.points[i] = cloud_in.points[indices[i]]; を代入しているので、確実に参照されていることがわかります。正しい解決策は、当然ながら、2つのオブジェクトを存在させたまま、ポインタの割り当てをオブジェクトの割り当てに変更することです。これで問題は解決です。
コード
cloud_filtered=back_cloudです。
pcl::SACSegmentation<pcl::PointXYZRGB> seg;
pcl::PointIndices::Ptr tmpinliers (new pcl::PointIndices);
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_plane (new pcl::PointCloud<pcl::PointXYZRGB> ()) を参照。
seg.setOptimizeCoefficients (true)。
seg.setModelType (pcl::SACMODEL_PLANE)です。
seg.setMethodType (pcl::SAC_RANSAC)を使用します。
seg.setMaxIterations (maxitter)。
seg.setDistanceThreshold (距離)を設定します。
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_f (new pcl::PointCloud<pcl::PointXYZRGB>) を参照。
int nr_points = (int) cloud_filtered->points.size ();
while (cloud_filtered->points.size () > ratio * nr_points)
{ <未定義
// 残りのクラウドから最大の平面成分をセグメント化する
seg.setInputCloud (cloud_filtered);
seg.segment (*tmpinliers, *coefficients);
std::cout<<"plane coefficients:" << *coefficients << std::endl;//plane の4つのパラメータを出力します。
if (tmpinliers->indices.size () == 0)
{ <未定義
std::cout << "与えられたデータセットに対して平面モデルを推定できませんでした." << std::endl;
を破る。
}
// 入力クラウドから平面インライア値を抽出します.
pcl::ExtractIndices<pcl::PointXYZRGB> を抽出します。
extract.setInputCloud (cloud_filtered)を実行します。
extract.setIndices (tmpinliers)を使用します。
extract.setNegative (false)を使用します。
// 平面インライヤをディスクに書き込む
extract.filter (*cloud_plane);
std::cout << "平面成分を表すPointCloud: " << cloud_plane->points.size () << " data points." << std::endl.PointCloud: < < <<< 平面を構成する点群を表すPointCloud。
// 平面的なインライアは取り除き、残りを抽出する
extract.setNegative (true)を使用します。
extract.filter (*cloud_f)を使用します。
cloud_filtered = cloud_f; //問題を*cloud_filtered = *cloud_f;に置き換えてください。
}
///
関連
-
解決策:matlab スレッド "AWT-EventQueue-0" で例外発生 java.lang.OutOfMemoryError: Javaヒープ
-
Xcode has Expected unqualified-id エラー
-
Java Exceptionが発生しました
-
デバッグのアサーションに失敗する問題 解決方法
-
スレッド "main "での例外を伴うEclipseでのMain関数の実行をテストする java.lang.ArrayIndexOutOfBoundsException:0
-
mongodb.service の起動に失敗しました。ユニット mongodb.service が見つかりませんでした。
-
NoClassDefFoundError: org/hamcrest/SelfDescribing JUnit-4.11でエラー。
-
ArrayAdapter は、リソース ID が TextView である必要があります。
-
落とし穴を踏む-Uncaught Error: BootstrapのJavaScriptは、jQueryを必要とします。
-
Application_Webservice の Global.asax ファイルの開始をトリガーすることはできません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefined! [rejected] マスター -> マスター (フェッチファースト) プッシュコードエラー
-
ValueError: 入力配列を形状(*,*)から形状(*)にブロードキャストできなかった。
-
macローカルのgruntプロンプト。致命的なエラーです。ローカルのgruntを見つけることができません。
-
AVD システムパスが見つかりません。Please define ANDROID_SDK_ROOT この問題は、必ずしもパス設定にあるわけではありません。
-
php_network_getaddresses: getaddrinfo が失敗した 原因
-
Pygameでタイマーを使う
-
tf.variable_scope パラメータ
-
PythonのTypeErrorです。__init__() に必要な位置引数が2つない
-
ValueErrorの解決策:解凍する値が足りない(期待値2、取得値1)。
-
シェルを実行するためにexecを使用するant