我正在开发一个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);
}
答案 0 :(得分:1)
不要使用就地转换
Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_RGB2GRAY);
而是尝试使用第二个变量:
Mat mGray;
Imgproc.cvtColor(mRgba2,mGray,Imgproc.COLOR_RGB2GRAY);
但你确定RGB是正确的类型吗?你的变量名为Rgba,所以你可能需要Imgproc.COLOR_RGBA2GRAY
?