2

我正在开发基于 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()

这是什么原因?

4

2 回答 2

2

好的,答案就在这里

Imgproc.cvtColor(mRgba,mRgb,Imgproc.COLOR_RGBA2RGB);

代替

mRgba.convertTo(mRgb, CvType.CV_8UC3);

非常感谢!!

于 2013-07-26T02:42:18.710 回答
1

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

PinkImage(mRgb.dataAddr());
于 2013-07-25T17:31:20.107 回答