AndroidStudio配置JavaCV环境
由于最近参加一个比赛需要用到人脸识别,但赛方限制使用第三方服务商提供的API云服务调用,因此想到了使用javacv来实现,但通过百度、google搜索发现所有的教程都是在eclipse中搭建,为此头疼了好几天,今天早起重新搭建一气呵成。写此博客主要是给新手朋友们作为参考,也是我的第一篇博文。
- 1、准备工作
- 2、环境搭建
- 3、测试程序
准备工作
-首先需要在google网站上下载javacv需要的包
-网站:https://code.google.com/archive/p/javacv/downloads
-无法打开的朋友可用我分享的网盘下载 http://pan.baidu.com/s/1c2BIhmo
-下载的包: javacv-0.7-bin.zip、opencv-2.4.3-android-arm.zip
- 分别解压 javacv-0.7-bin.zip、opencv-2.4.3-android-arm.zip 到任意目录下
-此刻准备工作结束
环境搭建
1、使用AndroidStudio创建工程StudioTestJavaCV,名字可随意
2、打开AndroidStudio工程,在Android视图下无法看到工程目录中的libs文件夹,因此点击Android,将其更换Project视图
将javacv-0.7-bin.zip 解压的文件夹中的 javacv.jar、javacpp.jar 拷贝到libs文件夹中
然后右键工程,选择Open Module Setting,选择Modules下的app(此为你的Module的名称)中的Dependencies,点击右侧绿色的加号(+),选择2.File dependency ,选择添加刚才拷贝进来的javacv.jar、javacpp.jar。
3、接下来需要拷贝.so,在eclipse中只需要在libs文件夹下建立armeabi文件夹即可,但是由于AndroidStudio使用gradle编译,于eclipse不同,因此按照eclipse中的方法将无法完成搭建。因此,follow me
还是同样的Project视图下,app>src>main 目录下新建jniLibs目录,然后再jniLibs下再新建armeabi目录
3、在 javacv-0.7-bin.zip 解压的文件夹中找到 javacv-android-arm.jar 将其解压出来
将该文件夹下的所有.so文件都拷贝到上一步新建的armeabi文件夹下
然后再将opencv-2.4.3-android-arm.zip 解压出来的目录下的 libs > armeabi 下的所有.so文件拷贝到上一步新建的armeabi文件夹下。
以上环境搭建完成
测试程序
图片翻转:
注:本代码来自网络,若作者要求停止使用,请联系本人立即删除
package com.act.studiotestjavacv;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
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.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 imageView = (ImageView) findViewById(R.id.img1);
imageView.setImageResource(R.drawable.p4);
// 实例化控件
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();
}
}
可以随便选择一张图片进行测试,效果如下
到这里本次Android端javacv环境的搭建过程已经结束了,这是我的第一篇博客,第一次写博客,想的太多,怕太粗略错过重点,又怕太复杂没有主次,总之是一个良好的开始,也算是作为一个学习的笔记作为后用,也希望能够给跟我之前一样在AndroidStudio上搭建javaCV环境遇到瓶颈的朋友作为一个参考。
版权申明: 一切步骤均来自网络,我只是将其进行统一整理,可随意转载,对于上面提到关于测试代码的问题,若代码原作则看到并且不同意使用,请及时留言,我将立即道歉删除。