1

我正在尝试将图像覆盖在android(本机部分,.cpp)中的视频帧上。我以yuv420sp格式获取我的视频帧,我将这个char *(缓冲区)传递给opencv,然后我用它创建了一个MAT

   Mat frame(Size(width,height),8UC1,buff);

同样,我将图像加载到 char *(buffer) 中,转换为 yuv420SP,并以类似的方式创建图像 Mat:

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.我通过以下方式转换了东西(框架和图像):

cvtColor(frame,frame,CV_COLOR_yuv420sp2BGR);

但我只想以 yuv420sp 格式回复,并且没有这样的标志可以将其转回 yuv420sp。

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

真的卡在这里了!任何建议都会非常有帮助!

4

0 回答 0