好的,所以我一直在网上尝试和搜索,但我找不到这个。
我有:
- 我混合使用的 OpenCV4Android:Java 和 Native。
获得的垫子
capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
这个不能改成Native,因为它是别人的库,完全是用非本地方式构建的。
我使用 mFrame.nativeObj
将此 Mat 传递给的本地方法并使用:
JNIEXPORT int JNICALL Java_com_... ( ...jlong addr ... )
{
Mat& mrgba = *((Mat*)addr);
// do stuff
imwrite( mrgba, ... );
}
现在...我使用这个矩阵,然后用 imwrite
编写它,所有这些都在 native 部分中。虽然 imwrite 确实写了一个文件,但它的颜色都是错误的。应该是白色的地方是红色,应该是黑色的地方是绿色,应该是我 table 颜色的地方是紫色,即淡黄色。现在,与其盲目地尝试 cvColor
和 convertTo
,我更愿意了解东西。
关于首先使用
检索的帧,我应该知道的 channel 数、类型、 channel 顺序以及诸如此类的东西是什么
capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
然后通过 JNI 传递给原生 OpenCV?实际上,我需要进行哪些转换才能使 native imwrite 正常运行?
由于某种原因,用
获得的图像
capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
需要这样转换:
cvtColor(mrgba, mbgr, CV_YCrCb2RGB, 4);
为了让 imwrite
正确输出图像到 SD 卡。
我不明白为什么(imwrite
应该接受 BGR 图像),但这至少回答了我的问题。
我是一名优秀的程序员,十分优秀!