【问题标题】:Convert a submat from RGB to GRAY OpenCV将 submat 从 RGB 转换为 GREY OpenCV
【发布时间】:2017-03-30 09:00:49
【问题描述】:

我正在开发一个应该在实时视频中检测人脸并将人脸区域转换为灰度的安卓程序。我成功地在检测到的面部区域周围创建了一个边框,并使用下面显示的功能,我设法创建了一个子垫,在主垫的左上角显示脸部。我的计划是将这个 submat 转换为灰度,然后将它放在实际的脸上,除非有人有更有效的方法?

submat 的代码如下所示。当我添加该行时:

Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_RGB2GRAY);

没有错误,但未显示左上角的拉伸面。我想这是因为 mRgba2 现在是不同的类型,所以我尝试添加

Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_RGB2GRAY);
Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_GRAY2RGB);

将 mRgba2 转换回 RGB,但这也不起作用。

public void processFrame(Mat face) { 

    Mat mRgba2 = face.clone();
    Imgproc.resize(face, mRgba2, new Size (400, 200));
    Mat submat = mRgba.submat(0, 200, 0, 400);
    mRgba2.copyTo(submat);
}

【问题讨论】:

  • 请向您发布错误消息。

标签: java android c++ opencv


【解决方案1】:

不要使用就地转换

Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_RGB2GRAY);

尝试使用第二个变量:

Mat mGray;
Imgproc.cvtColor(mRgba2,mGray,Imgproc.COLOR_RGB2GRAY);

但是您确定 RGB 是正确的类型吗?您的变量名为 Rgba,所以也许您需要 Imgproc.COLOR_RGBA2GRAY

【讨论】:

  • 感谢您的回复!我尝试使用 RGBA 代替,但这也不起作用。添加一个新变量也没有任何影响:/
  • 请将您完整的相关代码和错误信息添加到您的问题中
  • 我在提供的链接上将代码添加到了 pastebin。每次调用新帧时都会调用 onCameraFrame 方法,进程帧会尝试创建 submat 并将其从 rgb 转换为灰度。
  • 我管理,你是对的,我使用的是 RGB 而不是 RGBA!以后看到这个的人的解决方案是你必须在 .copyTo 部分之前将 Mat 转换回 RGBA!
猜你喜欢
  • 2013-01-03
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2018-09-28
相关资源
最近更新 更多