OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 3416|回复: 4

Android平台下一段非常简单的代码问题

[复制链接]
发表于 2016-7-5 17:47:20 | 显示全部楼层 |阅读模式
在java层调用native方法,代码如下:
  1. JNIEXPORT jintArray JNICALL Java_yu_myself_opencv_jni_OpenCVHelper_canny(
  2.     JNIEnv *env, jclass obj, jintArray buf, int w, int h){

  3.     jint *cbuf;
  4.     cbuf = env->GetIntArrayElements(buf, JNI_FALSE);
  5.     if (cbuf == NULL) {
  6.         return 0;
  7.     }

  8.     Mat srcImage(h, w, CV_8UC4, (unsigned char *) cbuf);

  9.     Mat grayImage(srcImage.size(), srcImage.type());
  10.     LOGD("1");
  11.     cvtColor(srcImage, grayImage, COLOR_BGRA2GRAY);
  12.     LOGD("2");
  13.     jint* ptr = (jint*)grayImage.ptr(0);
  14.     LOGD("3");
  15.     int size = w * h;
  16.     LOGD("4");
  17.     jintArray result = env->NewIntArray(size);
  18.     LOGD("5");
  19.     env->SetIntArrayRegion(result, 0, size, ptr);
  20.     LOGD("6");
  21.     env->ReleaseIntArrayElements(buf, cbuf, 0);
  22.     LOGD("7");

  23.     return result;
  24.     }
复制代码


控制台输出如下:
07-05 17:32:16.721 3689-3689/yu.myself.opencv D/NDK/OpenCVHelper: 1
07-05 17:32:16.727 3689-3689/yu.myself.opencv D/NDK/OpenCVHelper: 2
07-05 17:32:16.728 3689-3689/yu.myself.opencv D/NDK/OpenCVHelper: 3
07-05 17:32:16.728 3689-3689/yu.myself.opencv D/NDK/OpenCVHelper: 4
07-05 17:32:16.739 3689-3689/yu.myself.opencv D/NDK/OpenCVHelper: 5
07-05 17:32:16.743 3689-3689/yu.myself.opencv A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xa4400000 in tid 3689 (u.myself.opencv)


仅仅是一个灰度化处理,跪求告知问题出在哪了,小弟谢过了。
回复

使用道具 举报

发表于 2016-7-5 23:06:17 | 显示全部楼层
  1. jbyte* cbuf = env->GetByteArrayElements(buf, JNI_FALSE);
  2.     if (cbuf == NULL) {
  3.         return 0;
  4.     }
  5.     Mat srcImage(h, w, CV_8UC4, cbuf);
  6.     Mat grayImage;
  7.     LOGD("1");
  8.     cvtColor(srcImage, grayImage, COLOR_BGRA2GRAY); //不知道楼主怎么拿到BGRA图片的,我运行到这就ANR
  9.     //srcImage.copyTo(grayImage);//RGB.565倒是能正常显示。
  10.     LOGD("2");
  11.     jbyte* ptr = (jbyte*)grayImage.data;
  12.     LOGD("3");
  13.     int size = w * h;
  14.     LOGD("4");
  15.     jbyteArray result = env->NewByteArray(size);
  16.     LOGD("5");
  17.     env->SetByteArrayRegion(result, 0, size, ptr);
  18.     LOGD("6");
  19. env->ReleaseByteArrayElements(buf, cbuf, 0);
  20.     LOGD("7");
  21.     return result;

复制代码
我在android里读Bitmap(RGBA8888)保存到byte[],cvtColor时貌似找不到合适的格式,总是在这跳出。
只有在RGB565下才能正常显示,但是cvtColor还是报错。
楼主能拿到BGRA图片的话可以再试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-6 08:12:05 | 显示全部楼层
mumumusuc 发表于 2016-7-5 23:06
我在android里读Bitmap(RGBA8888)保存到byte[],cvtColor时貌似找不到合适的格式,总是在这跳出。[/backc ...

我的cvColor倒是没有错,只是把处理后的图像数据往java层传递的时候就出问题,不知道错在哪儿了
回复 支持 反对

使用道具 举报

发表于 2016-7-6 08:23:26 | 显示全部楼层
我是胖子 发表于 2016-7-6 08:12
我的cvColor倒是没有错,只是把处理后的图像数据往java层传递的时候就出问题,不知道错在哪儿了 ...

你可以用我的代码试试,我运行不到最后一步。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-6 20:22:44 | 显示全部楼层
mumumusuc 发表于 2016-7-6 08:23
你可以用我的代码试试,我运行不到最后一步。

能不能加个QQ好友   讨论下这个问题
我的QQ:544324974
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-25 17:10 , Processed in 0.009503 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表