OpenCV的与Android相机Surfaceview [英] OpenCv with Android Camera Surfaceview

查看:377
本文介绍了OpenCV的与Android相机Surfaceview的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想开发图像识别Android应用程序......我现在用的是自定义相机使用表面观....的这里在Android中捕捉到的图像......我想用OpenCV的处理拍摄的图像,我怎么能得到所拍摄的图像,并将其转换为垫?也有办法来保存拍摄的图像临时?在此先感谢

I am trying to develop an image recognition android application... I am using the customized camera using surface view.... As Herein android to capture images ... I want to process the captured images using opencv , how can i get the captured image and convert it to mat ? also is there a way to save the captured image Temporary ? thanks in advance

推荐答案

我假设你已经添加OpenCV库到你的成功的项目。

I assume that you have added opencv library to your project successfully.

下面是一个使用OpenCV4android样本code。

Here is a sample code using OpenCV4android.

public class SampleCameraFrameAccessActivity extends Activity implements        CvCameraViewListener2, OnTouchListener{
private static final String  TAG = "SampleCameraFrameAccessActivity";

protected CameraBridgeViewBase cameraPreview;
protected Mat mRgba;

protected BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                Log.i(TAG, "OpenCV loaded successfully");
//                    mOpenCvCameraView.enableView();
//                    mOpenCvCameraView.setOnTouchListener(ColorRegionDetectionActivity.this);
                cameraPreview.enableView();
            } break;
            default:
            {
                super.onManagerConnected(status);
            } break;
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera_sample_layout);

    cameraPreview = (CameraBridgeViewBase) findViewById(R.id.sample_test_camera_view);

    cameraPreview.setCvCameraViewListener(this);

}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    if(cameraPreview != null){
        cameraPreview.disableView();
    }
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}

@Override
public void onCameraViewStarted(int width, int height) {
    // TODO Auto-generated method stub
    mRgba =  new Mat(height, width, CvType.CV_8UC4);
}

@Override
public void onCameraViewStopped() {
    // TODO Auto-generated method stub
    mRgba.release();

}

@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    // TODO Auto-generated method stub
    mRgba = inputFrame.rgba();

    return mRgba;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    return false;
}

}

和XML布局文件是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/sample_test_layout" >

    <org.opencv.android.JavaCameraView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sample_test_camera_view" />

</RelativeLayout>

在onCameraFrame方法,你可以从相机的帧缓冲访问的每一帧。如果你想捕捉图像您可以添加一个按钮,并从缓冲区中的特定帧并进行处理。该帧由default.So不必把它转换为给定的垫对象。加工后,如果您需要它转换成位图, 你可以调用Utils.matToBitmap(垫,BMP);方法来做到这一点。

In onCameraFrame method you can access every frame from the frame buffer of the camera. if you want to capture an image you can add a button and take a particular frame from the buffer and process it. The frame is given as Mat object by default.So you don't have to convert it. after processing, if you need it to converted into bitmap, you can call Utils.matToBitmap(mat, bmp); method to do that.

这篇关于OpenCV的与Android相机Surfaceview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆