当前位置: 首页 > 知识库问答 >
问题:

为什么toGray函数没有在设备上显示输出

符鸿光
2023-03-14

为什么toGray函数不在设备上显示输出,下面是我将图像转换为灰度的代码,我将代码更改为函数,但它不显示输出:

using namespace std;
using namespace cv;
int toGray(Mat mSrc, Mat& bgra);

extern "C" {

JNIEXPORT jint JNICALL Java_org_opencv_samples_NativeActivity_CvNativeActivity_eqhist(JNIEnv* env, jobject,jint width, jint height, jintArray in, jintArray out)
   {
       jint* _in = env->GetIntArrayElements(in, 0);
       jint* _out = env->GetIntArrayElements(out, 0);

       Mat mSrc(height, width, CV_8UC4, (unsigned char*)_in);
       Mat bgra(height, width, CV_8UC4, (unsigned char*)_out);
       int conv;
       jint retVal;
       conv = toGray(mSrc, bgra);
       retVal = (jint)conv;
       return retVal;
       env->ReleaseIntArrayElements(in, _in, 0);
       env->ReleaseIntArrayElements(out, _out, 0);

   }
}

int toGray(Mat mSrc, Mat& bgra)
{
    Mat gray(mSrc.rows, mSrc.cols, CV_8UC1);
    cvtColor(mSrc , gray , CV_BGRA2GRAY);
    cvtColor(gray , bgra , CV_GRAY2BGRA);
    return 1;
}

共有1个答案

颛孙飞
2023-03-14

我认为,要使\u out的更改生效,您必须调用releaseintarayelements()。但这永远不会执行,因为你先返回。您的代码应为:

   env->ReleaseIntArrayElements(in, _in, 0);
   env->ReleaseIntArrayElements(out, _out, 0);
   return retVal;

当您创建结果时

Mat bgra(height, width, CV_8UC3, (unsigned char*)_out);

也就是说bgra是3个频道。但当您使用cvtColor(灰色、bgra、CV\U灰色2BGRA)时 在toGray()中需要一个4通道的目标,并且由于您提供了一个3通道的Mat,bgra将被重新分配(因此您的输出颜色将不会在输出数组中结束)。

 类似资料:
  • C:\Java32BitInstallation C:\AndroidSDKInstallation以下是我为其下载/安装的内容列表: Android SDK工具,第13版 Android SDK平台工具,修订版10 SDK平台Android 4.0.3,API 15,revsion 1 JDK JDK-7U3-Windows-I586 在我的path变量中,我添加了*C:\AndroidSDKI

  • 问题内容: 基本上我想知道为什么它什么都不输出: 您可以假设它应该产生输出,我已经运行另一行来确认 看来您不能多次通过管道传递tail的输出!有人知道这笔交易是什么,有解决方案吗? 编辑:到目前为止,要回答问题,该文件肯定具有应由grep显示的内容。作为grep是否这样做的证据: 输出正确显示,但是如果使用它代替: 没有输出显示。 如果真的有帮助,我正在运行ubuntu 10.04 问题答案: 在

  • 我的中的片段: 当我运行时,我看不到这两个命令的任何输出,即使它们没有被缓存。留档说默认情况下是冗长的。为什么我看不到命令的输出?我以前见过它们。 构建时的输出: 建筑完工后我看到的输出: 是从基于Debian 9的node: 12.18.0创建的。 Docker版本19.03.13,内部版本4484c46d9d。

  • 我正在尝试构建一个简单的Web应用程序,它接受大量的二进制输入,并计算一个布尔公式,然后输出。我做错了什么? null null

  • 这应该是一个相对简单的问题,但它让我发疯。我正在尝试在JavaFX中创建扫雷器(主要用于练习),但我甚至无法显示一个简单的矩形。我以前运行过一次游戏,但我试图使游戏更加抽象,因此更容易编码,但我遇到了不显示任何问题。 我消除了所有无关的代码,使其尽可能简单。我基本上是在尝试创建一个名为Box的具有特定颜色和大小的矩形,将框添加到窗格中,并显示窗格。为了使Box成为可以在窗格上显示的节点,我使Box

  • 父组件相关代码 html js 子组件 复现步骤: 第一次打开弹框: 时间选择器显示的是当前时间 更改时间选择器的时间之后关闭弹框 第二次打开弹框,显示时间是之前弹框里面时间选择的时间,而不是当前时间?