我正在开发一个 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);
}
最佳答案
不要使用就地转换
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/