0

私はリアルタイムで画像処理タスクを必要とするAndroidアプリケーションを開発しています。カメラのセットアップにOpenCVチュートリアル0を使用しており、リアルタイム画像を受信するまでコーディングを行った同じクラスを使用しています。今、ロゴを検出し、最も笑顔を検出したい私がインターネットで行った検索のうち、OpenCVに基づいているか、アプリケーションを非常に重くするようなライブラリを使用したり、統合が非常に難しいとわかったNDKを使用したりしています。他の多くのタスクを同時に実行する必要があるため、非常に少ないリソースしか必要としない機能を検出するための単純な Java 実装が必要です。書籍、Web サイト、その他のリンク、または画像マッチングと笑顔検出技術のコードを参照してください。私は本当に立ち往生しています私は次のコードを試しましたが、ピクセルからピクセルへのマッチングであるためあまり役に立ちません

private boolean  bit_match(Bitmap bmp1, Bitmap bmp2)
{  
    boolean first_x = false;
    int x1 = -2, x2 = -2,y1,y2;
    int minx1=-1,maxx2=-1,miny1=-1,maxy2=-1;
    int w = bmp1.getWidth();
    int h = bmp1.getHeight();

    int[]  pixels1 = new int[w * h];
    int[] pixels2 = new int[w * h];

      total_rounds=0;
      match_count=0;


    //long start = new Date().getTime();
     bmp1.getPixels( pixels1, 0,w, 0, 0, w, h );
     bmp2.getPixels( pixels2, 0,w, 0, 0, w, h );


     for (int i = 0; i < w; i++) {
            for (int j = 0; j < h; j++) 
            {
                    if (pixels2[i + j * w] != pixels1[i + j * w]) 
                    {
                        if(!first_x){ minx1=i; miny1=j; maxx2=i; maxy2=j; first_x = true; }
                        if(minx1>i) minx1 = i;
                        if(miny1>j) miny1 = j;
                        if(maxx2<i) maxx2 = i;
                        if(maxy2<j) maxy2 = j;
                        // System.out.println(i +"x"+ j);
                    }else{ match_count++;}

                    total_rounds++;
            }
     }
     if(minx1==maxx2 && maxy2==miny1)
     { 
         //System.out.println("Un singur pixel modificat");
         //Toast.makeText(this,"Un Modified", Toast.LENGTH_LONG).show();
         return true;
     }
     else{
        // System.out.println("Modified part (rectangle): "+minx1+","+miny1+"<->"+maxx2+","+maxy2);
         //Toast.makeText(this,"Modified part (rectangle): "+minx1+","+miny1+"<->"+maxx2+","+maxy2, Toast.LENGTH_LONG).show();
     return false;  
     }

}

精度はそれほど重要ではありません。アイデアが必要なだけなので、今のところ精度で妥協できます

4

2 に答える 2

1

Android用OpenCVで画像処理を行いたい場合はNDKを使う必要はありません。この説明を確認してください。単純ではないことはわかっていますが、開発レベルでは、純粋な Java コードを記述するだけで済みます。

于 2013-02-13T17:39:44.973 に答える
0

NDK を介した画像処理の例を次に示します https://github.com/chrisbanes/PhotoProcessing NDK をいじりたくない場合は、画像処理に OpenGL を使用することもできますが、やりたいことのためにお勧めしますNDK

于 2012-09-27T14:33:14.987 に答える