java - 将 submat 从 RGB 转换为 GRAY OpenCV

标签 java android c++ opencv

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

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

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

没有错误,但未显示左上角的拉伸(stretch)面。我认为这是因为 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);
}

enter image description here

最佳答案

不要使用就地转换

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

尝试使用第二个变量:

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

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

关于java - 将 submat 从 RGB 转换为 GRAY OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43113124/

相关文章:

c++ - 用户关闭 mfc 应用程序后是否必须释放内存?

java - 使用jsoup进行Google SERP解析

java - android - 由 : android. view.ViewRootImpl$CalledFromWrongThreadException 引起

java - 创建一个变量,其名称存储在字符串变量中

android - 如何在每次 "release"构建之前使用 gradle 执行 Android 测试?

javascript - Phonegap - JavaScript 不工作

c++ - 使用命名空间..很糟糕吗?

c++ - 在变量初始化期间使用 C++ lambda 函数

java - 连接字符串资源而不丢失 HTML 格式

java - 没有 XML 的 Spring Bean 注释