Android Jni OpenCv 利用Cany算子做边缘检测

一,利用OpenCV提供给Java封装好的调用摄像头接口,获取MAt

   @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();
    nativeRgba(rgba.nativeObj);//40ms以内就不会影响预览效果
    return rgba;
}

public static native void nativeRgba(long rgba);

二,实现jni方法 ,贴上 C++ 代码

extern “C”
JNIEXPORT void JNICALL
Java_com_example_dgxq008_opencv_1readpixel_MainActivity_nativeRgba(JNIEnv *env, jclass type,
jlong jrgba) {
Mat& rgba = * (Mat*)jrgba;
Mat temp = rgba.clone();

Mat gray;

cvtColor(rgba,gray,CV_RGBA2GRAY);

/*
 * canny用法,转成灰度图,降噪,用canny,最后将得到的边缘作为掩码,拷贝原图到效果图上,得到彩色的边缘图
 *
 * 使用 3x3内核来降噪
 */
blur( gray, gray, Size(3,3) );
Canny( gray, gray, 3, 9);

//【5】将rgba内的所有元素设置为0
rgba = Scalar::all(0);


//( OutputArray m, InputArray mask )
temp.copyTo( rgba,gray);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值