0

私はAndroid開発とOpenCVの両方に不慣れです。Android用のOpenCVライブラリをhttp://sourceforge.net/projects/opencvlibrary/files/opencv-android/からダウンロードし、仮想デバイスマネージャーを使用して電話をセットアップしました。Eclipseで「OpenCVチュートリアル0-Androidカメラ」を実行しようとすると、電話の画面に「致命的なエラー:カメラを開けません!」と表示されます。ログに次のエラーが表示されます。

08-07 15:02:57.322: E/Trace(708): error opening trace file: No such file or directory (2)
08-07 15:02:57.772: E/Sample::SurfaceView(708): Can't open camera!

また、簡単なプロジェクトを実行してみました。

package com.example;

import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;

    public class Test{
        public static void main(String[] args) {
            Mat example = Highgui.imread("/image.jpg");
        return;
    }
}

エラーが発生します

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_1(Ljava/lang/String;)J

これらのエラーを修正するにはどうすればよいですか?ちなみに、/ image.jpgは、Android仮想デバイスのSDカードではなく、プロジェクトの親ディレクトリを検索します。

本当にありがとう。

4

2 に答える 2

1

たくさんの検索の後、私はUnsatisfiedLinkErrorのこの解決策を見つけました(これは修正されたと思った後に再び現れました-ここを参照してください):

「3.アプリケーションプロジェクトにJNIパーツがない場合は、対応するOpenCVネイティブライブラリを/ sdk / native /libs/からプロジェクトディレクトリのlibs/フォルダーにコピーするだけです。」

つまり、\ armeabi、\ armeabi-v7a、および\x86フォルダーをコピーします。

"4.アプリケーションでOpenCVを有効にする最後のステップは、OpenCV APIを呼び出す前のJava初期化コードです。これは、たとえば、Activityクラスの静的セクションで実行できます。

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}

このコードスニペットは、次の直後に配置する必要があります。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_load_image);

今それは動作します!

于 2012-08-14T01:35:39.553 に答える
1

USB経由でデバイスを開発している場合は、オプションメニュー(行のスタック)からアプリマネージャーに移動し、OpenCVマネージャーまでスクロールダウンして(OpenCV 2.4.2以降を使用している場合)、強制的に閉じてみてください。Tutorial0アプリでも同じことを行います。

私のubuntuマシンでチュートリアル0を使用しています。ただし、いくつかのOpenCVクラスを純粋なAndroidプロジェクトに追加しようとすると、UnsatisfiedLinkエラーが発生しました。その後、チュートリアル0がしばらく動作を停止し、「カメラが見つかりません」というエラーが表示されました。OpenCV Managerが混乱する可能性があり、おそらく一部のリソースにロックなどがあり、再起動する必要があるようです。私の提案はTotorial0カメラの問題を修正しましたが、私の純粋なandroid+openCVプロジェクトのunsatisfiedLinkは修正しませんでした。

于 2012-08-08T17:54:47.853 に答える