Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将子贴图从RGB转换为灰色OpenCV_Java_Android_C++_Opencv - Fatal编程技术网

Java 将子贴图从RGB转换为灰色OpenCV

Java 将子贴图从RGB转换为灰色OpenCV,java,android,c++,opencv,Java,Android,C++,Opencv,我正在开发一个android程序,该程序可以在实时视频中检测人脸,并将人脸区域转换为灰度。我成功地在检测到的面部区域周围创建了一个边界,并使用下面所示的功能,成功地创建了一个submat,在主垫子的左上角显示面部。我的计划是把这个子图像转换成灰度,然后把它放在真实的脸上,除非有人有更有效的方法 submat的代码如下所示。当我添加行时: Imgproc.cvtColor(mRgba2,mRgba2,Imgproc.COLOR_RGB2GRAY); 没有错误,但左上角的拉伸面未显示。我想这是因为

我正在开发一个android程序,该程序可以在实时视频中检测人脸,并将人脸区域转换为灰度。我成功地在检测到的面部区域周围创建了一个边界,并使用下面所示的功能,成功地创建了一个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);
}

不要使用就地转换

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!