JavaCVNote:AS加载配置JavaCV-1.2环境
- 先简单介绍下JavaCV,JavaCV 是一款开源的视觉处理库,基于Apache License Version 2.0协议和GPLv2两种协议,对各种常用计算机视觉库封装后的一组jar包,封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。简单点说它就是个库,封装了很多Class类或者说接口,能有利于我们做图像处理、视频处理等开发;那么废话不多说,我们开始吧!
1、JavaCV库包下载
- 目前对于JavaCV来说已经到了v15.1了,但是我还是以1.2来演示,反正加载配置的手续是一样的没有什么大的区别。
- 下载区:
JavaCV是由Bytedeco这个组织开源提供的,当然就少不了它的提供网址啦!从官网下载速度会非常慢,其实是从GitHub下载非常慢,各种限速,本来想贴出快些的链接给你的,但是失败了,只能你自己去找度娘喽!!!
- 下载解压,一睹芳容:
2、AS(Android Studio)工程库添加
- 切换到Project管理层,方便查看
- 将上一步解压的javacv.jar、javacpp.jar、opencv.jar、opencv-android-arm.jar四个包复制到你的Moudle项目的libs文件夹下,如果没有请手动创建即可,注意对于opencv-android-arm.jar文件的类型你要根据你的系统与模拟器而定;
- 建立依赖关系,打开Moudle Setting->Dependencies,再点击右侧 “+”,选择"2 File Dependency",选择jar文件即可;
- 在"app/build.gradle"中添加如下代码
android {
....
//Exclude duplicates
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
}
....
}
- 成功与否,一睹芳容,预编译后,查看app/build.gradle是不是多以下代码:
3、测试开始喽!
- 在MainActivity下添加如下代码:
package com.sylanty.demonstrationproject;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacpp.opencv_core.IplImage;
// 静态成员变量必须 static导入.
import static org.bytedeco.javacpp.opencv_core.IPL_DEPTH_8U;
import static org.bytedeco.javacpp.opencv_core.cvFlip;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 实例化控件
ImageView imageview = (ImageView) findViewById(R.id.img);
// 创建图像, 使用自带的ic_launcher
Drawable drawable = idToDrawable(R.mipmap.ic_launcher);
Bitmap bitmap = this.drawableToBitmap(drawable);
// 将Bitmap转化为IplImage
IplImage iplImage = this.bitmapToIplImage(bitmap);
// 处理图像,比如旋转图像
cvFlip(iplImage, iplImage, 0);
// 再将IplImage转化为Bitmap
bitmap = this.IplImageToBitmap(iplImage);
imageview.setImageBitmap(bitmap);
}
/**
* IplImage转化为Bitmap
* @param iplImage
* @return
*/
public Bitmap IplImageToBitmap(opencv_core.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 opencv_core.IplImage bitmapToIplImage(Bitmap bitmap) {
opencv_core.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(id);
}
/**
* 将Drawable转化为Bitmap
* @param drawable
* @return
*/
public Bitmap drawableToBitmap(Drawable drawable) {
if(drawable == null)
return null;
return ((BitmapDrawable)drawable).getBitmap();
}
}
总结:
加载配置JavaCV成功,开启图像处理之路!!!