Android 开发opencv简单调用camera

    最近搞一个opencv笑脸识别的项目,由于是新手不太懂就慢慢的从最基本的开始,所以调用opencv的摄像头成为关键。好吧,那就开始简单的弄一个调用摄像头demo。(这也是我写的第一个博客,写的不好希望大家见谅)

    1.首先,开发环境是必须的,我想搞Android开发的,环境搭配应该是不是问题吧(本demo不需要NDK)。

    2.准备好Opencv_android_sdk   ,可以到https://opencv.org/这里下载,使用时需要安装manage  akp(我使用的是Opencv 3.3.0的)。

    3.接下来就是正式开始建立工程了。

    首先建立一个工程:

    

导入opencv_lib项目 :


选择sdk确定,把opencv_lib库导入,导入后也许你的opencv_lib工程会报错,那么你可以点击该工程,选择properties修改Android版本,其原因是opencv中android.hardware.camera2库低版本的不支持,因此调高其Android版本。


接下来就可以把opencv_lib添加到我们的自己的工程里去了。点我们的工程选择properties->Android->Add->Open CV Library,添加进来就ok了。


接下来我的layout布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:opencv="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


    <org.opencv.android.JavaCameraView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone"
        android:id="@+id/tutorial1_activity_java_surface_view"/>

</FrameLayout>

再是MainActivity的代码

public class MainActivity extends Activity implements CvCameraViewListener2 {

private static final String TAG = "OC::Activity";
private CameraBridgeViewBase mOpenCvCameraView;
//回调
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
}
break;
default: {
super.onManagerConnected(status);
}
break;


}
}
};

public MainActivity() {
// TODO Auto-generated constructor stub
Log.i(TAG, "Instantiated new " + this.getClass());
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
}
//弹出对话 dialog
public void ponPause() {
super.onPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
//恢复 回调
public void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}


public void onDestroy() {
super.onDestroy();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}


@Override
public void onCameraViewStarted(int width, int height) {
// TODO Auto-generated method stub


}

@Override
public void onCameraViewStopped() {
// TODO Auto-generated method stub

}
/*
* (non-Javadoc)
* 图像处理,ndk开发也可以在这里进行图像处理
* @see org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2#onCameraFrame(org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame)
*/
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
// TODO Auto-generated method stub
return inputFrame.rgba();
}
}

到这里就差不多基本大功告成了。

嗯还有xml文件没有写,最后在AndroidMakefile中添加

android:configChanges="keyboardHidden|orientation"

 android:screenOrientation="landscape"     //屏幕的控制

<uses-permission android:name="android.permission.CAMERA" />   //开启摄像头权限

这就大功告成了,在运行demo之前应该安装opencv提供的manage ,那么一个简单的opencv调用摄像头功能就完成了。

看看成果吧0.0


最后,希望我的写的对你们有用,也希望大家在进入新的事物中时还是仔细学习官方提供的资料!!!

猜你喜欢

转载自blog.csdn.net/qq_39734379/article/details/79410416