Java 将子贴图从RGB转换为灰色OpenCV
我正在开发一个android程序,该程序可以在实时视频中检测人脸,并将人脸区域转换为灰度。我成功地在检测到的面部区域周围创建了一个边界,并使用下面所示的功能,成功地创建了一个submat,在主垫子的左上角显示面部。我的计划是把这个子图像转换成灰度,然后把它放在真实的脸上,除非有人有更有效的方法 submat的代码如下所示。当我添加行时:Java 将子贴图从RGB转换为灰色OpenCV,java,android,c++,opencv,Java,Android,C++,Opencv,我正在开发一个android程序,该程序可以在实时视频中检测人脸,并将人脸区域转换为灰度。我成功地在检测到的面部区域周围创建了一个边界,并使用下面所示的功能,成功地创建了一个submat,在主垫子的左上角显示面部。我的计划是把这个子图像转换成灰度,然后把它放在真实的脸上,除非有人有更有效的方法 submat的代码如下所示。当我添加行时: Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_RGB2GRAY); 没有错误,但左上角的拉伸面未显示。我想这是因为
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);
}
不要使用就地转换
Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_RGB2GRAY);
请尝试使用第二个变量:
Mat mGray;
Imgproc.cvtColor(mRgba2,mGray,Imgproc.COLOR_RGB2GRAY);
但是你确定RGB是正确的类型吗?您的变量名为Rgba,因此可能需要
Imgproc.COLOR\u RGBA2GRAY
?请发布错误消息。感谢回复!我试着用RGBA代替,但也不起作用。添加一个新变量也没有任何影响:/请将完整的相关代码和错误消息添加到问题中。我在提供的链接上将代码添加到pastebin。每次调用新帧时都会调用onCameraFrame方法,并且process frame会尝试创建子帧并将其从rgb转换为灰度。我成功了,你是对的,我使用的是rgb而不是RGBA!!对于将来看到这种情况的人来说,解决方案是在.copyTo部分之前,必须将Mat转换回RGBA!