2012-03-13 16 views
0

私はJava openCVを使用しています。写真を読み込んでその上にマッチするテンプレートを実行しようとしています。 テンプレートマッチングメソッドはMatオブジェクトを扱うので、画像をロードしてMatに変換する必要があります。Java openCV - ビットマップをマットに変換中にエラーが発生しました

私はそれを行う方法は、次のとおりです。

Bitmap i = BitmapFactory.decodeFile("/sdcard/TVguide/Detection/detected.jpg"); 
image = Utils.bitmapToMat(i); 

この方法で私は私のAndroidのSDカードから写真をロードし、OpenCVの方法bitmapToMatを使用してマットオブジェクトに変換してみてください。 問題は、変換時にアプリケーションがクラッシュすることです。ここで

はLogCatです:

  03-14 15:15:57.636: W/dalvikvm(1059): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/opencv/android/Utils; 
      03-14 15:15:57.636: D/AndroidRuntime(1059): Shutting down VM 
      03-14 15:15:57.636: W/dalvikvm(1059): threadid=1: thread exiting with uncaught exception (group=0x40015578) 
      03-14 15:15:57.640: E/AndroidRuntime(1059): FATAL EXCEPTION: main 
      03-14 15:15:57.640: E/AndroidRuntime(1059): java.lang.ExceptionInInitializerError 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at com.marakana.Preview$3.onPictureTaken(Preview.java:191) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at android.hardware.Camera$EventHandler.handleMessage(Camera.java:565) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at android.os.Handler.dispatchMessage(Handler.java:99) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at android.os.Looper.loop(Looper.java:123) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at java.lang.reflect.Method.invokeNative(Native Method) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at java.lang.reflect.Method.invoke(Method.java:507) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at dalvik.system.NativeStart.main(Native Method) 
      03-14 15:15:57.640: E/AndroidRuntime(1059): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load opencv_java: findLibrary returned null 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at java.lang.Runtime.loadLibrary(Runtime.java:429) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at java.lang.System.loadLibrary(System.java:554) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  at org.opencv.android.Utils.<clinit>(Utils.java:86) 
      03-14 15:15:57.640: E/AndroidRuntime(1059):  ... 10 more 
      03-14 15:16:03.472: I/Process(1059): Sending signal. PID: 1059 SIG: 9 

私が何か間違ったことをやっているか、それだけでバギーOpenCVのであれば、私は理解することはできません。あなたはRGBA形式にあなたのビットマップを変換する必要があり

おかげ エヤル

答えて

3

Bitmap bmp32 = i.copy(Bitmap.Config.ARGB_8888, true); 

実はそれは、Android、OpenCVのユーザー・グループで最も議論の問題です:https://groups.google.com/group/android-opencv/

この問題の修正はすでにOpenCVトランクで利用可能で、OpenCVの次のリリースに含まれます。

またあなたはOpenCVのAPIを使用して画像を読み取ることができる:OpenCVのを使用して

Mat image = Highgui.imread("/sdcard/TVguide/Detection/detected.jpg"); 
+0

私は両方の提案を試みましたが、それでも同じlogCatを返します。行と何か関係があります:java.lang.UnsatisfiedLinkError:opencv_javaをロードできませんでした:findLibrary returned null – Eyal

+0

UnsatisfiedLinkErrorはあなたのことを意味します。 apkにはネイティブバイナリは含まれていません。 .apkを解凍して 'libopencv_java.so'の存在を確認することができます。また、電話機にARMv5/ARMv6 CPUが搭載されている場合は、.apkにARMv7のバイナリのみが存在する可能性があります。 –

+0

携帯電話はSamsung Galaxy Sです。いくつかの同級生が同じ電話をopenCVで使用しているので、動作するはずです。私は実際に.apkの意味を理解していませんが、C:\ Development \ OpenCV-2.3.1 \ libs \ armeabi-v7aに行くと、libopencv_java.soが存在します。それはまたarmeabiにも存在します。 – Eyal

0

負荷はBitmapFactoryを使用してロードするよりも(20%-40%)より迅速であり、OpenCVのマットに変換

マット画像=のHighGUI .imread( "/ sdcard/TVguide/Detection/detected.jpg");

関連する問題