android jni mat,OpenCV Mat处理Android JNI

我目前正在开发一些使用OpenCv的Android API和JNI进行更快处理的东西。OpenCV Mat处理Android JNI

目前,该程序从设备相机获取一帧,并将RGBA-Matrix转发给JNI接口的C++算法。

这通常工作,但试图以任何方式处理基质的时候,我得到一个SIGABRT -6错误与以下跟踪:

D/JNI/LaneDetection(15547): Processing frame

D/JNI/LaneDetection(15547): frame type: 24

D/JNI/LaneDetection(15547): frame rows, cols: 1080, 1920

D/JNI/LaneDetection(15547): grey_frame type: 24

D/JNI/LaneDetection(15547): grey_frame rows, cols: 1080, 1920

I/DEBUG ( 242): #00 pc 00036d58 /system/lib/libc.so (tgkill+12)

I/DEBUG ( 242): #01 pc 00014231 /system/lib/libc.so (pthread_kill+52)

I/DEBUG ( 242): #02 pc 00014f93 /system/lib/libc.so (raise+10)

I/DEBUG ( 242): #03 pc 000116a5 /system/lib/libc.so (__libc_android_abort+36)

I/DEBUG ( 242): #04 pc 0000fd3c /system/lib/libc.so (abort+4)

I/DEBUG ( 242): #05 pc 00724ce4 /data/app/at.sapps.sdo-2/lib/arm/libopencv_java.so (__gnu_cxx::__verbose_terminate_handler()+276)

I/DEBUG ( 242): #06 pc 007220e8 /data/app/at.sapps.sdo-2/lib/arm/libopencv_java.so (__cxxabiv1::__terminate(void (*)())+8)

I/DEBUG ( 242): #07 pc 0072212c /data/app/at.sapps.sdo-2/lib/arm/libopencv_java.so (std::terminate()+20)

I/DEBUG ( 242): #08 pc 007222b4 /data/app/at.sapps.sdo-2/lib/arm/libopencv_java.so (__cxa_throw+148)

I/DEBUG ( 242): #09 pc 001a5a41 /data/app/at.sapps.sdo-2/lib/arm/libopencv_java.so (cv::error(cv::Exception const&)+80)

I/DEBUG ( 242): #10 pc 00267243 /data/app/at.sapps.sdo-2/lib/arm/libopencv_java.so (cv::cvarrToMat(void const*, bool, bool, int)+134)

I/DEBUG ( 242): #11 pc 0035bcbb /data/app/at.sapps.sdo-2/lib/arm/libopencv_java.so (cvCvtColor+22)

I/DEBUG ( 242): #12 pc 00006195 /data/app/at.sapps.sdo-2/lib/arm/liblane_tracker_module.so (onFrame(cv::Mat*)+252)

相应的C++调用它导致错误如下:

cvCvtColor(frame, grey, CV_RGBA2GRAY); // convert to grayscale

正如您可能已经注意到的,矩阵类型和尺寸是相同的。我也试过CV_BGRA2GRAY,结果相同。 (不过,我敢肯定这是一个RGBA矩阵,因为JAVAAPI呼叫inputframe.rgba()来获得矩阵..)

的垫灰色被初始化与以下电话:

Mat *grey = new Mat(frame_size, 24); // global, 24=type= same as original frame Mat

// method init:

video_size.height = frame->rows;

video_size.width = frame->cols;

frame_size = cvSize(video_size.width, video_size.height);

grey = new cv::Mat(frame_size, 24, 3);

我无法弄清楚实际问题是什么,也许是由于我缺乏C++技能。

我很感谢每一个帮助&谢谢你提前。

java代码简而言之:

@Override

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

rgbaMat = inputFrame.rgba();

nativeDetect(rgbaMat.getNativeObjAddr(), lanes.getNativeObjAddr());

return rgbaMat;

}

private static native void nativeDetect(long inputImage, long lanes);

解答:用c方法是所有罪恶的根源。改变他们到他们的C++等价物解决了这个问题

2015-03-02

Aeefire

+0

我加了java代码。 当前的构造函数是Mat * gray = new Mat(frame_size,24);哪个也行不通(我愿意提供建议)。 类型“24”源自原始框架Mat,相机API将移交。这就是为什么我采取相同的,因为如果你采取不同类型的矩阵,我会看到有compability问题。 –

2015-03-02 15:03:23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值