想要没有OpenCV的Android图像处理或任何其他使用NDK的自由图像处理

时间:2012-09-27 14:23:22

标签: android image-processing

我正在开发和Android应用程序,它需要实时的图像处理任务 我正在使用OpenCV教程0进行相机设置并使用相同的类我已经完成编码,直到接收实时图像, 现在我想检测一个标志并检测微笑 我在互联网上进行的大多数搜索都是基于OpenCV或者使用这样的库,这些库会大量使用应用程序或者使用我发现很难集成的NDK。 我想要简单的java实现来检测占用很少资源的功能,因为我必须同时执行许多其他任务 任何人都可以给我一些书籍或网站或任何其他链接或任何代码片段进行图像匹配和微笑检测技术,请帮助我真的被困了我尝试了下面的代码,但没有多大帮助,因为是像素到像素匹配< / p>

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;  
     }

}

准确性并不重要,因为我只需要这个想法,因此我可以在准确性上妥协

2 个答案:

答案 0 :(得分:1)

如果您想使用OpenCV for Android进行图像处理,则无需使用NDK。请检查this description。我知道这并不简单,但在开发级别上,您只需要编写纯Java代码。

答案 1 :(得分:0)

以下是通过NDK https://github.com/chrisbanes/PhotoProcessing进行图像处理的示例 你可以使用OpenGL进行图像处理,如果你不想弄乱NDK,虽然你想做什么我会推荐NDK