読者です 読者をやめる 読者になる 読者になる

ぷろぐ((>ω<))

ぷろぐらみんぐ関係のメモ

Android Studio でデバッグ実行してもブレークポイントで止まらない場合の対処

Android

タイトルの件でちょっとハマったのでメモ。
Android Studioデバッグ実行してもブレークポイントで止まらない場合、考えられる理由は私の知っている範囲では次の3つ。まだまだ事例は他にもあるかもしれないですが。
私がハマったのは3番目の奴です。

1. AsyncTask等で別スレッドで動いている場合

そのスレッドでデバッグできるようにするために追加すべきコードがあります。
「AsyncTask ブレークポイント」等で検索すればたくさん出てきます。

www.ecoop.net

2. Gradle の設定で debuggable が false になっている

android studio ブレークポイント 止まらない」で検索すると下記サイトがヒットします。
d.hatena.ne.jp

3. Gradle の設定で minifyEnabledが true になっている

私はこれでした。debuggableが true でも minifyEnabled が false じゃないとブレークポイントでは止まらないのですね…

以上!

OpenCVを使いたいときのcmakeの書き方

C++ CMake OpenCV

次のように書けばよい。かなりシンプル。link_directoriesの指定は不要。
なぜならば、${OpenCV_LIBS}でライブラリへの絶対パスが指定されるため

OpenCVが見つかった場合のみプロジェクトを作成したければif(DEFINED ${OpenCV_VERSION})でadd_executableやtarget_link_librariesを囲めばよい

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(opencv_project)

find_package(OpenCV 2.4 REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

add_executable (project1 hoge.cpp)
target_link_libraries (project1 ${OpenCV_LIBS})

一発でわかる Iterative Closest Point のコンセプト図解

PCL PCL入門講座 Point Cloud Library

2つの点群を重ね合わせる手法にICP (Iterative Closest Point) というものがあります。
1992年に発表されてから、現在に至るまであらゆる派生手法が提案されています。

ベーシックなICPの仕組みは一言で言うと「近傍点との距離の最小化を繰り返す」です。これを動画で示すと次の通りです。ちょっとずつ2つの点群の間が縮まって、最後的にぴったり合わせられるわけです。

ICPの注意点として、「初期位置合わせが必要」ということが挙げられます。言い換えると「2つの点群はある程度近い位置に配置されていないといけない」ということです。もし、初期位置合わせがされていなければ、下記の動画のように変な結果に終わってしまいます。(オレンジの破線が正しい点の対応関係を表す)

適切な初期位置合わせ+ICPで例えば次の画像のように2つの3D点群をピタッと合わせられます。

  • 点群1

f:id:presan:20160518011521p:plain

  • 点群2

f:id:presan:20160518011525p:plain

  • ICP結果

f:id:presan:20160518011528p:plain

Visual Studio 2013 でソリューションを開こうとするとビジーになる場合の対処

Visual Studio 2013 でソリューションを開こうとするとビジーになる場合が前からちょくちょくあったが、
今日は全く開けなくなった。何回再起動したり.suoファイルを削除したりしても治らない。


そこでちょっと調べて見つけた解決方法。私はこれで治った。

簡単に言うと「ツール」→「オプション」→「ソース管理」でプラグイン「なし」にする

OpenCV3では視差画像が作れない?

C++ OpenCV

OpenCVで視差画像を作ろうと思って調べたところ下記のサイトを発見。ちなみに2008年の情報。
Momma's Wiki: OpenCV/距離計測 - ステレオマッチング(二眼カメラ)による距離計測 ※CvCalibFilte...

これに従って、最新であるOpenCV3を使って試してみたら、cvFindStereoCorrespondence関数が未定義といって怒られる。
ちなみに、OpenCV2.4.11を使ったらできた。

OpenCV3では視差画像は作れないか、別の何かに置き換わったのかもしれない。
暇なときにOpenCV3の視差画像関連の機能を探したいと思います。

PTAMをVS2013でWebカメラ使用版に改造してビルド

C++

PTAMビルド手順はいろんなサイトに載ってますが、100%その通りにやればビルドできたというわけではないので、そのメモ。

上記サイトの情報に加えて必要だったこと

事前準備

PTAMコンパイル

  • 「Build/Win32の中のPTAM.sln、PTAM.vcproj、CameraCalibrator.vcproj、VideoSource_Win32_CMU1394.cc を PTAM フォルダ直下へコピー。」とあるが:
    • PTAM.vcxproj、CameraCalibrator.vcxprojの2ファイルも必要
    • VideoSource_Win32_CMU1394.ccは不要
  • 2つのプロジェクト(CameraCalibrator、PTAM)それぞれのDebug、Releaseの使用libファイルからcmu1394.lib的なのを削除
  • max, min関数が見つからないと怒られるので、ATANCamera.ccに「#include <algorithm>」を追加

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

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

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