Android Jni 利用OpenCV 显示单一颜色值

一,同样的,利用封装好的库收集图像
package com.example.dgxq008.opencv_readpixel;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

public class MainActivity extends Activity implements View.OnClickListener , CameraBridgeViewBase.CvCameraViewListener2 {
private Button btnProc;
private ImageView imageView;
private Bitmap bmp;

private CameraBridgeViewBase mOpenCvCameraView;
private Mat rgba;

static {
    System.loadLibrary("native-lib");
}

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


    btnProc = (Button) findViewById(R.id.btn_gray_process);
    btnProc.setOnClickListener(this);

    mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.jcv);
    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
    mOpenCvCameraView.setCvCameraViewListener(this);
}

@Override
public void onCameraViewStarted(int width, int height) {
    rgba = new Mat(width,height, CvType.CV_8UC4);
}

@Override
public void onCameraViewStopped() {
    rgba.release();
}

@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

    //rgba = inputFrame.gray();
    rgba = inputFrame.rgba();
    nativeRgbaToBlue(rgba.nativeObj);//40ms以内就不会影响预览效果
    return rgba;
}

/**
 * A native method that is implemented by the 'native-lib' native library,
 * which is packaged with this application.
 */
public static native int[] grayProc(int[] pixels, int w, int h);

public static native void nativeRgba(long rgba);

public static native void nativeRgbaToBlue(long rgba);


@Override
public void onClick(View view) {
}


@Override
protected void onResume() {
    super.onResume();
    if (!OpenCVLoader.initDebug()) {
    } else {
        mOpenCvCameraView.enableView();
    }
}

@Override
protected void onPause() {
    super.onPause();
    if (mOpenCvCameraView != null){
        mOpenCvCameraView.disableView();
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mOpenCvCameraView != null){
        mOpenCvCameraView.disableView();
    }
}

}

二, 实现Jni接口,完成过滤颜色

extern “C”
JNIEXPORT void JNICALL
Java_com_example_dgxq008_opencv_1readpixel_MainActivity_nativeRgbaToBlue(JNIEnv *env, jclass type,
jlong jrgba) {
Mat& rgba = * (Mat*)jrgba;
uchar* rgbaData = rgba.data;
int height = rgba.rows;
int weight = rgba.cols;

int length = height * weight;

for (int i = 0; i < length; ++i) {
    //RGBA, 只取一种,其他重置为零,alpha忽略
    rgbaData[4*i+0] = rgbaData[4*i+0];
    rgbaData[4*i+1] = 0;
    rgbaData[4*i+2] = 0;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值