Mat::convertto()在javacv、android摄像头中不工作

Mat::convertto()在javacv、android摄像头中不工作,android,opencv,javacv,Android,Opencv,Javacv,我正在开发一个基于Opencv4android SDK教程2-混合处理的Android OpenCV应用程序 在帧处理函数public Mat onCameraFrame(CvCameraViewFrame inputFrame){} 帧是RGBA,我想通过以下操作制作RGB: mRgba = inputFrame.rgba(); mGray = inputFrame.gray(); Mat mRgb=new Mat(640,480,CvType.CV_8UC3); mRgba.

我正在开发一个基于Opencv4android SDK教程2-混合处理的Android OpenCV应用程序

在帧处理函数
public Mat onCameraFrame(CvCameraViewFrame inputFrame){}

帧是RGBA,我想通过以下操作制作RGB:

 mRgba = inputFrame.rgba();
 mGray = inputFrame.gray();

 Mat    mRgb=new Mat(640,480,CvType.CV_8UC3);
 mRgba.convertTo(mRgb, CvType.CV_8UC3);
 //Imgproc.cvtColor(mRgba, mRgb, CvType.CV_8UC3);
 PinkImage(mRgb.dataAddr());
但是,当我调试并记录传递给JNI部分的内容时,我发现它根本不起作用。
mRgb
即使在调用
converto()


原因是什么?

您从未使用转换后的数据。您仍然将
mRgba.dataAddr()
传递给
PinkImage()
,这是未修改的RGBA图像。您需要传入修改后的数据:

PinkImage(mRgb.dataAddr());
好的,答案是

而不是

mRgba.convertTo(mRgb, CvType.CV_8UC3);

非常感谢

哦,对不起,那只是个打字错误。我调试并获得4通道mRgb,即使在更改之后也是如此。我在JNI内部使用C++接口,仍然得到同样的结果。我认为MatFrame数据是不允许更改的。
mRgba.convertTo(mRgb, CvType.CV_8UC3);