Opencv 代码未使用android ndk显示灰度图像

Opencv 代码未使用android ndk显示灰度图像,opencv,android-ndk,java-native-interface,Opencv,Android Ndk,Java Native Interface,我的代码没有将图像显示为灰度,因为我在eclipse中使用的是android ndk jni部分: 下面是为我工作的部分 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,

我的代码没有将图像显示为灰度,因为我在eclipse中使用的是android ndk

jni部分:

下面是为我工作的部分

   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);
   vector<Mat> sChannels;
   split(mSrc, sChannels);

        for(int i=0; i<sChannels.size(); i++)
        {
            Mat channel = sChannels[i];
            equalizeHist(channel, channel);
        }
        merge(sChannels, bgra);
   env->ReleaseIntArrayElements(in, _in, 0);
   env->ReleaseIntArrayElements(out, _out, 0);

   jint retVal;
   int ret = 1;
   retVal = jint(retVal);
   return retVal;

CV_BGRA2GRAY
希望输出为CV_8UC1。要生成BGRA输出,可以使用临时图像和2次转换:

   Mat mSrc(height, width, CV_8UC4, (unsigned char*)_in);
   Mat gray(height, width, CV_8UC1);
   Mat bgra(height, width, CV_8UC4, (unsigned char*)_out);
   cvtColor(mSrc , gray , CV_BGRA2GRAY);
   cvtColor(gray , bgra , CV_GRAY2BGRA);

@Alex Cohn但我希望输出为灰度图像,当我使用它作为
CV_8UC1
时,它在android设备上显示4个图像当使用2个转换时,它返回rgba图像不是吗?我不知道如何显示位图;在Java中处理8bpp
gray
位图是很有可能的。但通常我们在Android原生位图中每像素包装32个机器人。为此,我使用第二次转换。否,它不会返回RGBA图像,因为第二次转换仅使用来自
灰度
Mat的灰度信息。OpenCV将适当地将其从8bpp扩展到32 bpp。@AlexCohn但每种情况都不同吗?就像我们从上面的代码中删除两行
cvtColor
,并用
双边过滤器(mSrc、bgra、5、5、50)替换它一样然后它也没有显示结果,即使它在VisualStudio上对我也有效,为什么会这样,每种情况都不同吗?谢谢,我不确定我是否理解您的后续问题,但请注意,任何图像处理之后都会有显示结果的Java部件。第二步应该调整为正确接受第一步OpenCV的结果。
   Mat mSrc(height, width, CV_8UC4, (unsigned char*)_in);
   Mat gray(height, width, CV_8UC1);
   Mat bgra(height, width, CV_8UC4, (unsigned char*)_out);
   cvtColor(mSrc , gray , CV_BGRA2GRAY);
   cvtColor(gray , bgra , CV_GRAY2BGRA);