原创:转发请注明出处
Demo下载地址:http://download.csdn.net/download/prince_wenzheng/9760658
本文主要介绍使用OpenCV实现相机实时对比图片,得到相似度,可用于实现类似ar红包的功能
首先下载SDK,OpenCV-3.2.0(下载官网:http://opencv.org),点击OpenCV for Android下载,下载完成后解压
SDK中包含很多有趣的demo,可以一并看一下,所以,最好新建一个Eclipse的工作空间
1. 创建demo工程
新建一个Android Application,命名为OpenCVDemo
2. 集成OpenCV SDK
将完整的OpenCV SDK拷贝到工作空间中,将OpenCV_SDK_3.2.0/sdk/java导入到Eclipse中,这个就是我们需要集成的library,将它与我们的demo关联
3. 配置SDK
●因为要用到相机,所以在AndroidManifest.xml添加以下代码
添加权限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
在application节点下添加
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
●在MainActivity中继承CvCameraViewListener2接口
CvCameraViewListener2是使用OpenCV相机的核心监听
public class MainActivity extends Activity implements CvCameraViewListener2 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onCameraViewStarted(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onCameraViewStopped() {
// TODO Auto-generated method stub
}
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
// TODO Auto-generated method stub
return null;
}
}
onCameraViewStarted:相机启动时调用
onCameraViewStopped:相机销毁时调用
onCameraFrame: 相机工作时调用,参数是相机每一帧的图像,实时对比就在这个方法中进行
●初始化相机
编写布局文件,添加相机控件,相机控件实质是SurfaceView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.opencvtest.MainActivity" >
<org.opencv.android.JavaCameraView
android:id="@+id/cv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
在OnCreate中初始化相机,并添加开启相机的回调
/**
* CV相机
*/
private CameraBridgeViewBase mCVCamera;
/**
* 加载OpenCV的回调
*/
private BaseLoaderCallback mLoaderCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {