opencv:Mat2.copyTo(Mat1(Rect))仅为复制区域提供灰度

opencv:Mat2.copyTo(Mat1(Rect))仅为复制区域提供灰度,opencv,grayscale,yuv,mat,Opencv,Grayscale,Yuv,Mat,我试图将图像覆盖在androidnative部分的视频帧上,.cpp。我得到yuv420sp格式的视频帧,我将这个char*缓冲区传递给opencv,然后在那里用它创建一个MAT Mat frame(Size(width,height),8UC1,buff); 同样,我已将图像加载到char*缓冲区,转换为yuv420SP,并以类似的方式创建图像垫: Mat imageMat((Size(width,height),8UC1,imgBuff)); 在此之后,我将覆盖图像复制到接收到的视

我试图将图像覆盖在androidnative部分的视频帧上,.cpp。我得到yuv420sp格式的视频帧,我将这个char*缓冲区传递给opencv,然后在那里用它创建一个MAT

   Mat frame(Size(width,height),8UC1,buff);
同样,我已将图像加载到char*缓冲区,转换为yuv420SP,并以类似的方式创建图像垫:

Mat imageMat((Size(width,height),8UC1,imgBuff));
在此之后,我将覆盖图像复制到接收到的视频帧上,如下所示:

Rect roi(X,Y,U,V);
imageMat.copyTo(frame(roi));
我需要相同yuv420sp格式的合并帧,因此在此之后我返回:

return frame.data;//i am returning char * from this api to my .cpp file 
图像被正确地覆盖,但问题是只有覆盖的部分是灰度的,其余的全帧被正确地着色! 我就是不明白怎么了

注: 我已经尝试了一些事情,比如: 1.我通过以下方式转换了thingsframe和图像:

cvtColor(frame,frame,CV_COLOR_yuv420sp2BGR);
但我只希望返回yuv420sp格式的响应,并且没有这样的标志将其返回yuv420sp

2.用8UC3试过,没什么区别。无论如何,我的视频帧是彩色的,那么为什么图像是灰度的呢


真的困在这里了!任何建议都会非常有用

所有东西都应该是8UC3..但是我的视频帧返回正确的颜色,即使它是8Uc1?这是唯一一个以灰度形式出现的叠加图像,其余的整个帧是合适的。