gpt4 book ai didi

ios - 如何修复此 YCrCb -> RBG 转换公式?

转载 作者:可可西里 更新时间:2023-11-01 04:38:46 25 4
gpt4 key购买 nike

我使用的公式来自 this question :

uint8_t *rgbBuffer = malloc(imageWidth * imageHeight * 3);

// .. iterate over height and width

// from ITU-R BT.601, rounded to integers
rgbOutput[0] = (298 * (y - 16) + 409 * cr - 223) >> 8;
rgbOutput[1] = (298 * (y - 16) + 100 * cb + 208 * cr + 136) >> 8;
rgbOutput[2] = (298 * (y - 16) + 516 * cb - 277) >> 8;

我假设是基于 ITU-R_BT.601 formula in the wiki article .

enter image description here

但是我认为公式不太正确,因为输出图像看起来像这样:

I don't actually have green hair

如何修改公式?

最佳答案

假设第一次计算的最大值(y == 255cr == 255):

rgbOutput[0] = (298 * (255 - 16) + 409 * 255 - 223) >> 8;
rgbOutput[0] = (298 * 239 + 104295 - 223) >> 8;
rgbOutput[0] = (71222 + 104295 - 223) >> 8;
rgbOutput[0] = 175294 >> 8; // 175294 == 0x2ACBE
rgbOutput[0] = 684; // 684 == 0x2AC

rgbOutput[0] 可以容纳的最大值是 255。您试图将 684 分配给它,导致截断。分配给它的实际值是172 (0xAC)。

编辑 1

根据您发布的公式,您的第一次计算应如下所示:

rgbOutput[0] = ((298 * y) >> 8) + ((409 * cr) >> 8) - 223;

这会导致 480 的值(假设 ycr 的最大值),这也会导致截断。

编辑 2

据说建议使用以下等式:

equation

改用它,您的第一个计算应该是这样的:

rgbOutput[0] = ((255 * (y - 16)) / 219) + ((179 * (cr - 128)) / 112;

这导致 480 的值(假设 ycr 的最大值)(编辑 1 中的相同答案),这也会导致截断。

编辑 3

请参阅@Robert 的回答以获得完整的解决方案。

编辑 4

y == 0cr == 0 时,写入 y 的值也将导致截断,除非钳位是执行。

关于ios - 如何修复此 YCrCb -> RBG 转换公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25210852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com