【发布时间】:2013-05-09 05:32:58
【问题描述】:
作为初学者,我只想通过 OpenCV 将位图转换为灰度。我拥有了一切 正在运行,但是一旦我想将图像转换为灰度,它就会崩溃。 任何人都可以帮忙吗?我希望sn-ps足够了,如果没有我可以附上其余的。
部分java文件:
// convert to opencv structure
Mat image = new Mat();
Mat grayimage = new Mat();
Utils.bitmapToMat(b2, image);
// call opencv for processing
grayimage = convertToGray (image);
// convert back
Utils.matToBitmap(grayimage, b2);
JNI cpp 文件:
JNIEXPORT jlong JNICALL Java_com_my_sample_MainMenuActivity_convertToGray (JNIEnv*, jobject, jlong addrRGBA)
{
LOGI("Converting to Gray.");
Mat *mRGBA = (Mat*)addrRGBA;
Mat *_retval_;
cvtColor(*mRGBA, *_retval_, CV_RGB2GRAY);
LOGI("Successfully finished Converting to Gray.");
return (jlong) _retval_;
}
转换图像后,它永远不会成功记录。 似乎位图未正确转换为 Mat。 Bitmap 本身确实存在,我可以在 ImageView 上显示它。 有人知道我(显然)做错了什么吗?
05-14 21:26:27.082: I/native(22394): Converting to Gray.
05-14 21:26:27.082: A/libc(22394): Fatal signal 11 (SIGSEGV) at 0xcd10001d (code=1), thread 22394 (ialabs.mysample)
对不起,如果这个问题在其他地方得到回答,我还没有找到 Mat 的例子, 似乎只是一些带有 IplImage 的东西。
【问题讨论】:
-
This answer 有一个将图像数据传递到本机代码并进行处理的示例。它演示了创建
cv::Mat对象的正确方法,这是您的主要问题之一。 -
是的,你是对的,只是忘记传递地址,而不是对象本身。谢谢!
标签: android opencv java-native-interface