我正在开发基于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
CV_8UC4
仍为converto()
这是什么原因?
答案 0 :(得分:2)
好的,答案是here
Imgproc.cvtColor(mRgba,mRgb,Imgproc.COLOR_RGBA2RGB);
而不是
mRgba.convertTo(mRgb, CvType.CV_8UC3);
非常感谢!!
答案 1 :(得分:1)
您永远不会使用转换后的数据。您仍然会将mRgba.dataAddr()
传递给PinkImage()
,这是未经修改的RGBA图像。您需要传入修改过的数据:
PinkImage(mRgb.dataAddr());