Android OpenCV imwrite,颜色是错误的:我应该使用convertTo/cvColor的哪个参数?
好吧,我一直在网上搜索,但我找不到这个 我有:Android OpenCV imwrite,颜色是错误的:我应该使用convertTo/cvColor的哪个参数?,android,opencv,java-native-interface,Android,Opencv,Java Native Interface,好吧,我一直在网上搜索,但我找不到这个 我有: OpenCV4Android,我正在混合使用:Java和本机 用金属制成的垫子 capture.retrieve(mFrame,Highgui.CV\u CAP\u ANDROID\u COLOR\u FRAME\u RGBA) 这不能更改为本机,因为它是其他人的库,并且完全以非本机方式构建 通过使用mFrame.nativeObj并使用以下方法传递此Mat的本机方法: JNIEXPORT int JNICALL Java_com_... ( ..
capture.retrieve(mFrame,Highgui.CV\u CAP\u ANDROID\u COLOR\u FRAME\u RGBA)代码>
mFrame.nativeObj
并使用以下方法传递此Mat的本机方法:
JNIEXPORT int JNICALL Java_com_... ( ...jlong addr ... )
{
Mat& mrgba = *((Mat*)addr);
// do stuff
imwrite( mrgba, ... );
}
imwrite
编写它,所有这些都在本机部分中。虽然imwrite确实编写了一个文件,但它的颜色都是错误的。红色代表白色,绿色代表黑色,紫色代表我桌子的颜色,即淡黄色。现在,与其盲目地尝试cvColor
和convertTo
,我宁愿知道一些东西
对于第一次检索到的帧,我应该知道多少个通道、类型、通道顺序等等
capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
然后通过JNI传输到本机OpenCV?实际上,我需要进行哪些转换才能使本机imwrite正常工作?试试看
capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_BGRA);
因为OpenCV使用蓝色、绿色和红色通道而不是红色、绿色、蓝色通道读取图像。出于某种原因,使用
capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
需要这样转换:
cvtColor(mrgba, mbgr, CV_YCrCb2RGB, 4);
以便imwrite
将图像正确输出到SD卡
我不明白为什么(
imwrite
应该接受BGR图像),但至少这回答了我的问题。我不想这样做。然而,如果我这样做了,imwrite写的图像都是绿色的,没有红色或蓝色。(当然,活动中的显示也有错误的颜色。)很难从帧中猜出频道顺序…但是根据文档,OpenCV总是以BGR顺序读取图像…因此您可以使用cvtColor()进行播放一旦你得到了想要的结果,你可以试着解释它,以便更好地理解…我尝试了各种转换,但都不起作用,因此这里的问题。我不打算盲目地尝试cvtColor的所有组合,除非没有其他选择。