Predator's Vision

画像処理、3D点群処理、DeepLearning等の備忘録

指定桁数&指数表記なしで整数・小数を適切に表示する方法

電卓等、数字の表示可能な桁数が限られる中で、適切に数字を表示したい場合の方法。

    DecimalFormat decimalFormat1_ = new DecimalFormat("0.0000000E0");
    DecimalFormat decimalFormat2_ = new DecimalFormat("0.#######");
    String numberStr = decimalFormat2_.format(Double.parseDouble(decimalFormat1_.format(number)));

GridViewがsetEmptyViewで消えてくれない/出てきてくれない(未解決)

ListViewやGridViewでは、中身が空の時に表示するビューを設定できるらしい。

そこで、GridViewにも適用してみたのだが、うまく動かなかったというメモ。(解決していない)

続きを読む

PCL の Verbosity Level

PCLのAPIが処理途中に出力するログはどれぐらい出力するか設定を変えられる。
全モードを試してみるコードのメモ。

#include <iostream>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/console/print.h>

void doSomething() {
	pcl::PointCloud<pcl::PointXYZ> cloud;
	pcl::io::loadPCDFile("not_exist.pcd", cloud);
}

void main() {
	std::cout << "\nALWAYS:";
	pcl::console::setVerbosityLevel(pcl::console::VERBOSITY_LEVEL::L_ALWAYS);
	doSomething();

	std::cout << "\nERROR:";
	pcl::console::setVerbosityLevel(pcl::console::VERBOSITY_LEVEL::L_ERROR);
	doSomething();

	std::cout << "\nWARN:";
	pcl::console::setVerbosityLevel(pcl::console::VERBOSITY_LEVEL::L_WARN);
	doSomething();

	std::cout << "\nINFO:";
	pcl::console::setVerbosityLevel(pcl::console::VERBOSITY_LEVEL::L_INFO);
	doSomething();

	std::cout << "\nDEBUG:";
	pcl::console::setVerbosityLevel(pcl::console::VERBOSITY_LEVEL::L_DEBUG);
	doSomething();

	std::cout << "\nVERBOSE:";
	pcl::console::setVerbosityLevel(pcl::console::VERBOSITY_LEVEL::L_VERBOSE);
	doSomething();

	std::system("pause");
}

BGRとRGBを間違えて静止画/動画を保存してしまったときの変換

個人的に赤と青が逆の状態で保存してしまったー!ということがよくあります。
ちょっと検索した感じ、BGR→RGB変換のソフトウェアは公開されていないようだったので、OpenCVを使って自作。以下、C++のコード。

続きを読む

続・PCDファイルの保存読込速度・サイズ比較

1つ前の記事で、点群データ(pcl::PointXYZ)に関して保存読込速度とサイズ比較をした。

最後のまとめで、特徴量記述子については違う結果になるかもと予想したが、せっかくなので今回実際に比較してみた。

続きを読む

PCDファイルの保存読込速度・サイズ比較

ポイントクラウドの保存関数(PCD形式)は下記の3通りがある。

  • pcl::io::savePCDFileASCII
    • 全部テキスト形式で保存
  • pcl::io::savePCDFileBinary
    • ヘッダはテキスト形式で、データ部分はバイナリ形式で保存
  • pcl::io::savePCDFileBinaryCompressed

ちなみに pcl::io::savePCDFile という関数もあるが、この関数では引数でASCIIかBinaryかを選択する。何も指定しないとASCIIになる。

読込に関してはどの形式で保存してもすべて pcl::io::loadPCDFile という関数で可能。

保存読込速度・ファイルサイズ比較

以上の3つの方法について、保存・読込速度とファイルサイズを下記のコードで比較した。

続きを読む

PCL1.7.2で一部のライブラリがエラーLNK1189でビルドできない問題の対処

PCLのビルド中にpcl_featureについては下記のようなエラーメッセージが出て使えなくなってしまった。

fatal error LNK1189: オブジェクトまたはメンバーの数がライブラリの最大許容数 65535 を超えています。


調べたところ下記のページが見つかった。被害者の共通点は Visual Studio を使っていること。

Visual Studioコンパイラはライブラリ内のメンバー数に制限を課しているそう。
この問題を回避するには『PCLビルド時の PCL_ONLY_CORE_POINT_TYPES をONにして、pcl_featureのメンバーを減らす』しか方法がないそう。

ただし、これを行うとpcl::PointNormal等の一部のポイントタイプが、今まで通りには使えなくなる。


というわけで、以下では

  • LNK1189エラーの解消方法
  • 今まで通りにポイントタイプを使うための方法

をメモ。

LNK1189エラーの解消方法

  1. cmake-gui で PCL_ONLY_CORE_POINT_TYPES を ON にする
  2. Configure を押す
  3. Generate を押す
  4. 生成された PCL.sln を開いて ALL_BUILD する
    • クリーン・リビルドする必要はなく、単純にビルドでよい

今まで通りにポイントタイプを使うための方法

  1. 今まで作ったプロジェクトに PCL_NO_PRECOMPILE マクロを定義する

CMakeLists.txt内に書いておきたい場合:

add_definitions(-DPCL_NO_PRECOMPILE)

ソースファイル内に書いておきたい場合:

#define PCL_NO_PRECOMPILE

動作確認

下記のコードの PointT, NormalT の typedef を自分が使いたいポイントタイプに書き換えて、1,2行目のコメントを入れ替えて実行してみる。

続きを読む