开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 645|回复: 6
收起左侧

[求助] 求个算法 yuv420p 转rgb 不要浮点算法c# c++ go什么语言都可以

[复制链接]
结帖率:100% (19/19)
发表于 2023-10-22 13:01:48 | 显示全部楼层 |阅读模式   江西省萍乡市
求个算法 yuv420p 转rgb 不要浮点算法c# c++ go什么语言都可以

补充内容 (2023-10-22 13:04):
不要汇编语言 rust语言 冷门的看不懂0.0~~~~
结帖率:46% (6/13)
发表于 2023-10-22 13:43:15 | 显示全部楼层   河南省濮阳市
这个参数,里面包含了浏览器的信息。按理说可以固定,扣起来有点费劲
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)

签到天数: 3 天

发表于 2023-10-22 13:57:17 | 显示全部楼层   广西壮族自治区钦州市
还不要浮点算法,带浮点都不行么·
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)

签到天数: 3 天

发表于 2023-10-22 13:57:35 | 显示全部楼层   广西壮族自治区钦州市
那就只给思路了
要将YUV420P转换为RGB,可以按照以下步骤进行:

对每个像素点,获取其对应的Y、U和V值。

根据下面的公式计算R、G和B的值:

R = Y + 1.402 * (V - 128)
G = Y - 0.344136 * (U - 128) - 0.714136 * (V - 128)
B = Y + 1.772 * (U - 128)

其中,Y、U和V的取值范围为[0, 255],通常需要减去128来进行归一化。

确保计算得到的R、G和B值都在[0, 255]的范围内。如果某个值小于0,则将其置为0;如果某个值大于255,则将其置为255。

这样,你就可以将YUV420P格式的像素转换为RGB值了。
回复 支持 反对

使用道具 举报

结帖率:100% (19/19)
 楼主| 发表于 2023-10-22 13:57:51 | 显示全部楼层   江西省萍乡市
星星之夜 发表于 2023-10-22 13:57
还不要浮点算法,带浮点都不行么·

效率太差
回复 支持 反对

使用道具 举报

结帖率:78% (18/23)

签到天数: 2 天

发表于 2023-10-24 10:45:27 | 显示全部楼层   河南省安阳市
Y = 0.299R + 0.587G + 0.114*B
U = -0.147R - 0.289G + 0.436*B
V = 0.615R - 0.515G - 0.100*B
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)

签到天数: 3 天

发表于 2023-10-24 16:10:47 | 显示全部楼层   广西壮族自治区钦州市

using System;

public class YuvToRgbConverter
{
    public static void Convert(byte[] yuvData, byte[] rgbData, int width, int height)
    {
        int frameSize = width * height;
        int uvOffset = frameSize;

        for (int y = 0; y < height; y++)
        {
            int yIndex = y * width;
            int uvIndex = uvOffset + (y / 2) * width;

            for (int x = 0; x < width; x++)
            {
                int yValue = yuvData[yIndex + x];
                int uValue = yuvData[uvIndex + (x / 2) * 2];
                int vValue = yuvData[uvIndex + (x / 2) * 2 + 1];

                int c = yValue - 16;
                int d = uValue - 128;
                int e = vValue - 128;

                int r = (298 * c + 409 * e + 128) >> 8;
                int g = (298 * c - 100 * d - 208 * e + 128) >> 8;
                int b = (298 * c + 516 * d + 128) >> 8;

                rgbData[yIndex * 3 + x * 3] = Clamp(r);
                rgbData[yIndex * 3 + x * 3 + 1] = Clamp(g);
                rgbData[yIndex * 3 + x * 3 + 2] = Clamp(b);
            }
        }
    }

    private static byte Clamp(int value)
    {
        return (byte)(value < 0 ? 0 : (value > 255 ? 255 : value));
    }
}
回复 支持 反对

使用道具 举报

  高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表