【问题标题】:Mat::convertto() not working in javacv, android cameraMat::convertto() 在 javacv、android 相机中不起作用
【发布时间】:2013-07-26 10:42:18
【问题描述】:

我正在开发一个基于 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 部分的内容时,我发现它根本不起作用。 mRgbCV_8UC4 即使在调用 converto() 之后

这是什么原因?

【问题讨论】:

    标签: android opencv javacv


    【解决方案1】:

    好的,答案是here

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

    而不是

    mRgba.convertTo(mRgb, CvType.CV_8UC3);
    

    非常感谢!!

    【讨论】:

      【解决方案2】:

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

      PinkImage(mRgb.dataAddr());
      

      【讨论】:

      • 哦,对不起,这只是一个错字。即使在更改后,我也调试并获得 4 通道 mRgb。我在 jni 中使用 C++ 接口并且得到了同样的东西。我来宾 MatFrame 数据不知何故,不允许更改。
      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多