将子像素从RGB转换为GRAY OpenCV

时间:2017-03-30 09:00:50

标签: java android c++ opencv

我正在开发一个Android程序,可以检测实时视频中的面部,并将面部区域转换为灰度。我成功设法在检测到的面部区域周围创建一个边框,并使用下面显示的功能,我设法创建一个显示主Mat左上角的面的子图。我的计划是将此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);
}

enter image description here

1 个答案:

答案 0 :(得分:1)

不要使用就地转换

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

而是尝试使用第二个变量:

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

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