【Java CV与Android】在Android工程里配置JavaCV

来源:互联网 发布:无人机编队飞行软件 编辑:程序博客网 时间:2024/05/15 08:23

版权声明:本文转载自这位大神 http://blog.csdn.net/zgljl2012/article/details/48193859
目录(?)[-]
具体配置过程
实例
在Android中配置JavaCV的步骤相当简单,分为三步:
1. 在网上下载javacv-x-bin包和opencv-x-android-arm包,我这有javacv-0.7-bin和opencv-2.4.3-android-arm
2. 在两个包中提取出.so库和.jar库中,放入Android项目的libs中;
3. 将.jar包通过 add jar添加进项目

具体配置过程

1.下载两个包:

javacv-0.7-bin
opencv-2.4.3-android-arm
2.在Eclipse中创建Android项目,项目名称为:TestJavaCV

3.在libs文件下创建文件夹:armeabi

4.解压两个包,在javacv-0.7-bin里找到
这里写图片描述

将其解压,进入文件里底层,看到
这里写图片描述

将所有这些库放到libs/armeabi文件夹下

5.在javacv-0.7-bin里找到
这里写图片描述
将这两个包放入libs文件夹下

6.进入项目的Build Path,点击Add JARs…将上述两个jar添加进项目,切记,是Add JARs,不是Add External JARs

7.进入解压后的opencv-2.4.3-android-arm文件夹,进入libs/armeabi,将以下所有so库都添加进入Eclipse项目的libs/armeabi文件夹下:
这里写图片描述

8.至此,配置完毕

实例

下面写一个实例,使用JavaCV旋转一张图像,然后在ImageView中显示。

activity_main中将TextView改成ImageView,id为img
在MainActivity写入如下代码:

package com.example.testjavacv;  import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;  import static com.googlecode.javacv.cpp.opencv_core.cvFlip;  import android.graphics.Bitmap;  import android.graphics.drawable.BitmapDrawable;  import android.graphics.drawable.Drawable;  import android.os.Bundle;  import android.support.v7.app.ActionBarActivity;  import android.widget.ImageView;  import com.googlecode.javacv.cpp.opencv_core.IplImage;  public class MainActivity extends ActionBarActivity {      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          // 实例化控件          ImageView img = (ImageView) findViewById(R.id.img);          // 创建图像, p4是随便找的一张图像,这里可以自己随便找一张图片代替          Drawable drawable = idToDrawable(R.drawable.p4);          Bitmap bitmap = this.drawableToBitmap(drawable);          // 将Bitmap转化为IplImage          IplImage iplImage = this.bitmapToIplImage(bitmap);          // 处理图像,比如旋转图像          cvFlip(iplImage, iplImage, 0);          // 再将IplImage转化为Bitmap          bitmap = this.IplImageToBitmap(iplImage);          img.setImageBitmap(bitmap);      }      /**      * IplImage转化为Bitmap      * @param iplImage      * @return      */      public Bitmap IplImageToBitmap(IplImage iplImage) {          Bitmap bitmap = null;          bitmap = Bitmap.createBitmap(iplImage.width(), iplImage.height(),                   Bitmap.Config.ARGB_8888);          bitmap.copyPixelsFromBuffer(iplImage.getByteBuffer());          return bitmap;      }      /**      * Bitmap转化为IplImage      * @param bitmap      * @return      */      public IplImage bitmapToIplImage(Bitmap bitmap) {          IplImage iplImage;          iplImage = IplImage.create(bitmap.getWidth(), bitmap.getHeight(),                  IPL_DEPTH_8U, 4);          bitmap.copyPixelsToBuffer(iplImage.getByteBuffer());          return iplImage;      }      /**      * 将资源ID转化为Drawable      * @param id      * @return      */      public Drawable idToDrawable(int id) {          return this.getResources().getDrawable(R.drawable.p4);      }      /**      * 将Drawable转化为Bitmap      * @param drawable      * @return      */      public Bitmap drawableToBitmap(Drawable drawable) {          if(drawable == null)              return null;          return ((BitmapDrawable)drawable).getBitmap();      }  }  
0 0
原创粉丝点击