2

好的,所以我一直在尝试和在线搜索,但我找不到这个。

我有:

  1. 我以混合方式使用的 OpenCV4Android:Java 和 Native。
  2. 获得的垫子

    capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

不能更改为 Native,因为它是其他人的库,并且完全以非本地方式构建。

  1. mFrame.nativeObj我通过使用和使用传递此 Mat 的本机方法:

    JNIEXPORT int JNICALL Java_com_... ( ...jlong addr ... )
    {
    
        Mat& mrgba = *((Mat*)addr);
    
        // do stuff
    
        imwrite( mrgba, ... );
    }
    

现在......我使用这个矩阵,然后我用 , 来写它imwrite,所有这些都在这个原生部分中。虽然 imwrite 确实写入了一个文件,但它的颜色都是错误的。红色的地方应该是白色的,绿色的地方应该是黑色的,紫色的地方应该是我桌子的颜色,即淡黄色。现在,与其盲目地尝试cvColorand convertTo,我宁愿知道一些东西。

关于第一次检索到的帧,我应该知道的通道数、类型、通道顺序以及诸如此类的东西是多少

capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

然后通过JNI传递给原生OpenCV?实际上,我需要进行哪些转换才能使本机imwrite 正常运行?

4

2 回答 2

1

由于某种原因,使用

capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

需要像这样转换:

cvtColor(mrgba, mbgr, CV_YCrCb2RGB, 4);

为了imwrite正确地将图像输出到 SD 卡。

我不明白为什么(imwrite应该接受 BGR 图像),但至少这回答了我的问题。

于 2013-01-17T09:06:27.500 回答
0

尝试

capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_BGRA);

因为 OpenCV 读取带有蓝色、绿色和红色通道的图像,而不是红色、绿色、蓝色。

于 2013-01-15T16:11:23.243 回答