Mat::convertto()在javacv、android摄像头中不工作
我正在开发一个基于Opencv4android SDK教程2-混合处理的Android OpenCV应用程序 在帧处理函数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.
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);