gpt4 book ai didi

android - OpenCV Native Android cvtColor 崩溃

转载 作者:行者123 更新时间:2023-11-28 04:35:43 28 4
gpt4 key购买 nike

我需要将图像转换为灰度,然后再转换回 RGBA 以便能够在其中绘图。

目前,我正在使用两个不同的 cvtColor 调用来执行此操作,虽然在 Android 中性能不佳(RGBA -> GRAY -> RGBA),但效果很好。

直接从相机获取灰度图像速度更快,只需执行一次 cvtColor 调用即可产生巨大差异(GRAY -> RGBA)。

问题是第二种方法会使应用程序在几秒钟后关闭。 Android Studio 中的 logcat 没有显示应用程序崩溃,但它显示了一些错误,并且选择了“无过滤器”选项。这是日志 https://pastebin.com/jA7jFSvu .这似乎表明 OpenCV 的相机有问题。

下面是两段不同的代码。

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

// Method 1 - works
cameraImage = inputFrame.rgba();
native.exampleProcessImage1(cameraImage.getNativeObjAddr(), cameraImage.getNativeObjAddr());

return cameraImage;

// Method 2 - app closes after a few seconds
cameraImage = inputFrame.gray();
Mat result = new Mat();
native.exampleProcessImage2(cameraImage.getNativeObjAddr(), result.getNativeObjAddr());

return result;
}

这是我的 C++ 代码:

void Java_com_example_native_exampleProcessImage1(JNIEnv *env, jobject instance, jlong sourceImage, jlong destImage) {
// works!
Mat &src = * ((Mat *) sourceImage);
Mat &dest = * ((Mat *) destImage);
Mat pivot;

// src is RGBA
cvtColor(src, pivot, COLOR_RGBA2GRAY);
cvtColor(pivot, dest, COLOR_GRAY2RGBA);
// dest is RGBA

// process
}

void Java_com_example_native_exampleProcessImage2(JNIEnv *env, jobject instance, jlong sourceImage, jlong destImage) {
// does not work
Mat &src = * ((Mat *) sourceImage);
Mat &dest = * ((Mat *) destImage);

// src is GRAY
cvtColor(src, dest, COLOR_GRAY2RGBA);
// dest is RGBA

// process
}

这在 Linux 和 OpenCV 上按预期工作。

你知道我做错了什么吗?还有另一种方法可以达到同样的目的吗?性能是关键,尤其是对于 Android 设备。

提前谢谢你。

最佳答案

对于第二种情况,你有内存泄漏,这会导致泄漏
~ 3 sec * fps * frame_resolution * 4 bytes

我认为崩溃发生在内存已满之后。

您需要在每次 exampleProcessImage2 调用之后的某处调用 result.release();

关于android - OpenCV Native Android cvtColor 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51520531/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com