2011-11-15 22 views
11

この質問がこのサイトで既にカバーされている場合はお詫び申し上げますが、私はまっすぐ答えを見つけることはできないようだ。 OpenCVを使って写真を撮り、オブジェクトを検出してシーン内のそれらのオブジェクトの座標を計算するアンドロイドアプリを作っています。AndroidでOpenCVを使用して画像を読み込む

私がアンドロイドのために見つけたすべてのチュートリアルは、カメラプレビューのリアルタイム処理、またはC++を使用しているようですが、これはC++の道を進む必要がないことを強く望みます。私は何かシンプルなものが欠けていると確信していますが、私はそれが何であるか分かりません。

私が検出しようとしているオブジェクトは、テーブルのビリヤードボールです。ボールをより良く検出するための最良の前処理技術は何でしょうか?私はcannyメソッドを使用して簡単なテストを行いました。ボールから反射する光が円の形を壊すようです。 Androidの中の画像をロードするために

+1

はHoughCircles – Adrian

答えて

16

、あなたはimage1のはあなたのAndroidプロジェクトのResourcesフォルダの下の画像である

Bitmap bMap=BitmapFactory.decodeResource(getResources(),R.drawable.image1) 

を使用することができます。 その後、BitmapをバイトまたはMatに変換し、C++(OpenCV)で処理するか、matToBitmapまたはMatToBitmapメソッドでJavaをandroid-opencvに変換します。

あなたがマットのデータ型を使用して、処理に慣れている場合は、使用することができます(あなたがこれを使用するandroid-opencvプロジェクトが必要です)

Mat m = Highgui.imread("/media/path_to_image"); 

あなたはビリヤードの球を検出するため、ハフ円をブロブを使用することができます。これに答える方法はありません。ビリヤードボールが検出されたかどうかを確認するために、正規化されたRGBまたはLab色空間を使用して(ビリヤードボールの反射を除去するために)遊んでみることができます(ハングサークル、ブロブ検出器を実行することによって)。

リアルタイムシナリオでは、機械学習技術を使用して特定の特徴ベクトルを使用してビリヤードボールを検出し、トレーニングとテストを行う必要があります。

+0

に探して試してみてください、私はそれを把握することができました、ありがとう、私はまた、どのjavacv知りましたネイティブのopencvコードよりも真実に留まり、他のチュートリアルと一緒に進むのが簡単になります。 – vince88

+0

@ vince88 javacvチュートリアルはどこにありますか?そして、あなたはまた、ウィンドウでそれを設定する方法を教えてもらえますか?ありがとう。 –

+0

また、Matデータ型を宣言した後、それを表示するために何をする必要がありますか? –

2

私はそれが遅すぎると知っていますが、誰かがこれを使うかもしれません。

Highguiがアンドロイド用にopencvから削除されました。

代わりにImgcodesを使用できます。

Mat BGRMat = Imgcodecs.imread(getResources().getDrawable(R.drawable.img).toString()); 
+0

あまりにも遅くない、私を助けた! getDrawableは推奨されていません。Mat BGRMat = Imgcodecs.imread(ResourcesCompat.getDrawable(getResources()、R.drawable.img、null).toString()); – syonip

+1

実際に私はこの作業を行うことができませんでした。drawableリソースにはimreadが使用できるパスがないためです。 toString()はリソースの名前を返すだけです... – syonip

+0

@syonip上記のコードを参照してください。いくつかの間違いがあります。コードを正しくコピーしてください。たとえば、getResources()メソッドの後に、(カンマ)の代わりに。(ドット)を入れる必要があります。がんばろう... –

5

これは私の作品(ここから答えました:How to get Mat with a drawable input in Android using OpenCV)を

Mat img = null; 
try { 
    img = Utils.loadResource(this, R.drawable.image_id, CvType.CV_8UC4); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

こんにちは、RGB画像を読み込むためにこのコードを使用しましたが、一部の共鳴では 'Mat'タイプが' CV_8UC1'でした。それはどんなアイデアですか? – noamgot

関連する問題