ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如果不使用规定的YUV2RGB 转换矩阵来转换可能会造成overflkow

2021-05-10 17:01:15  阅读:104  来源: 互联网

标签:YUV2RGB rgb2yuv %. 转换 matrix srcyuv float dstrgb overflkow


#include <stdio.h>

static const float matrix_rgb2yuv_709[] = {
    0.2126, 0.7152, 0.0722,
    - 0.1146, -0.3854, 0.5000,
    0.5000, -0.4542, -0.0458
};

static const float matrix_rgb2yuv_709_invert[] = {
    1, 0, 1.5747,
    1, -0.1873, -0.4682,
    1, 1.8556, 0
};

static const float matrix_rgb2yuv_ntsc[] = {
    0.2989, 0.5866, 0.1145,
    -0.1688, -0.3312, 0.5000,
    0.5000, -0.4184, -0.0816
};

static const float matrix_rgb2yuv_ntsc_invert[] = {
    1, 0, 1.4022,
    1, -0.3456, -0.7145,
    1, 1.7710, 0
};

void mul32f_3x3(const float* matrix, float* in, float* out)
{
    out[0] = matrix[0] * in[0] + matrix[1] * in[1] + matrix[2] * in[2];
    out[1] = matrix[3] * in[0] + matrix[4] * in[1] + matrix[5] * in[2];
    out[2] = matrix[6] * in[0] + matrix[7] * in[1] + matrix[8] * in[2];
}

int check_if_overflow()
{
    for (int i = 0; i < 256; i+=255) {
        for (int j = 0; j < 256; j+=255) {
            for (int k = 0; k < 256; k+=255) {
                float src[] = { i/255.0,j/255.0,k/255.0 };
                //float src[] = { 0/255.0,255/255.0,0/255.0 };
                float srcyuv[3], dstrgb[3];
                mul32f_3x3(matrix_rgb2yuv_709, src, srcyuv);
                mul32f_3x3(matrix_rgb2yuv_ntsc_invert, srcyuv, dstrgb);
                if (dstrgb[0] < -0.1 || dstrgb[1] < -0.1 || dstrgb[2] < -0.1) {
                    printf("srcyuv:%.4f %.4f %.4f dstrgb:%.4f %.4f %.4f\n", 
                        srcyuv[0], srcyuv[1], srcyuv[2], dstrgb[0], dstrgb[1], dstrgb[2]);
                    //return -1;
                }
            }
        }
    }
    return 0;
}

int main()
{
    return check_if_overflow();
}

 

output

srcyuv:0.2126 -0.1146 0.5000 dstrgb:0.9137 -0.1050 0.0096
srcyuv:0.2848 0.3854 0.4542 dstrgb:0.9217 -0.1729 0.9673

 

标签:YUV2RGB,rgb2yuv,%.,转换,matrix,srcyuv,float,dstrgb,overflkow
来源: https://www.cnblogs.com/luoyinjie/p/14751701.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有