我正在尝试将图像覆盖在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 试过,真的没有任何区别。无论如何,我的视频帧是彩色的,那为什么图像是灰度的?
真的卡在这里了!任何建议都会非常有帮助!