如何处理RGB到YUV的转换
image-processing
opencv
5
0

公式说:

Y = 0.299 * R + 0.587 * G + 0.114 * B;

U = -0.14713 * R - 0.28886 * G + 0.436 * B;

V = 0.615 * R - 0.51499 * G - 0.10001 * B;

例如,如果U变量变为负数怎么办?

U = -0.14713 * R - 0.28886 * G + 0.436 * B;

假定R和G(一个)且B = 0的最大值。因此,我对在OpenCV中实现此对流函数感兴趣,那么,如何处理负值?使用浮动图片?无论如何,请解释一下,可能是我听不懂。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

您可以使用code CV_YCrCb2RGB对于CV_YCrCb2RGB > RGB)和CV_RGBYCrCb对于RGB-> YUV),在cVtColor中使用CV_YCrCb2RGBRGBC中转换RGB <-> YUV。

void cvCvtColor(const CvArr* src, CvArr* dst, int code)

将图像从一种颜色空间转换为另一种颜色空间。

收藏
评论

根据YUV彩色平面 ,当用小数表示时,Y,U和V都可以为负。

YUV色彩空间

收藏
评论

对于平面格式,OpenCV不是正确的工具。相反,您最好使用ffmpeg。例如

static void rgbToYuv(byte* src, byte* dst, int width,int height)
{

    byte* src_planes[3] = {src,src + width*height, src+ (width*height*3/2)};
    int src_stride[3] = {width, width / 2, width / 2};
    byte* dest_planes[3] = {dst,NULL,NULL};
    int dest_stride[3] = {width*4,0,0};
    struct SwsContext *img_convert_ctx = sws_getContext(
        width,height,
        PIX_FMT_YUV420P,width,height,PIX_FMT_RGB32,SWS_POINT,NULL,NULL,NULL);
        sws_scale(img_convert_ctx, src_planes,src_stride,0,height,dest_planes,dest_stride); 
    sws_freeContext(img_convert_ctx);
}

将YUV420图像转换为RGB32

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号