YUV转换成RGB图像花屏

编解码

#1

bool CAGVideoFrameObserver::onRenderVideoFrame(unsigned int uid, VideoFrame& videoFrame)重写这个接口函数,YUV转换成RGB图像花屏
代码如下:
cv::Mat subYuvImage;
subYuvImage.create(videoFrame.height * 3 / 2, videoFrame.width, CV_8UC1);
CopyYUVToImage(subYuvImage.data, (uint8_t*)videoFrame.yBuffer, (uint8_t*)videoFrame.uBuffer, (uint8_t*)videoFrame.vBuffer, videoFrame.width, videoFrame.height);
cv::Mat subRgbImage;
cv::cvtColor(subYuvImage, subRgbImage, CV_YUV2BGR_I420);
//cv::imwrite(“aaa.jpg”, subRgbImage);

用到的函数:
static void CopyYUVToImage(uchar * dst, uint8_t *pY, uint8_t *pU, uint8_t *pV, int width, int height)

{ uint32_t size = width * height; memcpy(dst, pY, size); memcpy(dst + size, pU, size / 4); memcpy(dst + size + size / 4, pV, size / 4); }


#2

我们的数据格式是yuv420,具体转换方法可以参考一下这个链接,比较详细:https://blog.csdn.net/xiaole0313/article/details/80334211
这个问题在工单跟进。


#3

摄像头设置1280x720像素打开,如果3个以上的用户加入频道, VideoFrame& videoFrame这个参数得到的
int width; //width of video frame
int height; //height of video frame
int yStride; //stride of Y data buffer
int uStride; //stride of U data buffer
int vStride; //stride of V data buffer
数据分别为:288,162,320,160,160,,按照内存对其,stride的值并不都大于等于帧宽288,没办法套用公试转换了,麻烦解答,谢谢。


#4

image


#5

YUV转RGB是属于格式转换的问题,建议参下这里的链接。
https://blog.csdn.net/liyuanbhu/article/details/68951683

你做格式转换是为了做什么处理?


#6

为了做美颜再渲染,我总觉得你们的YUV420数据有问题,按照https://blog.csdn.net/liyuanbhu/article/details/68951683中所说的算法,仍然存在转换后图像错乱问题。


#7

能否给
int yStride; //stride of Y data buffer
int uStride; //stride of U data buffer
int vStride; //stride of V data buffer
zhe参数的用法介绍?


#8

你参考下声网集成facuenity的这个demo,这里面有YUV转成RGB的代码示例。


#9

好的,谢谢