单个像素 亮度 HTML,YUV与像素值之间的关系

标签:

一幅彩色图像的基本要素是什么?

说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少。一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147200(十进制),也就是3.95M大小。这个大小跟多少个像素点和数据的存储格式有关。下面简述yuv与像素的关系:

YUV与像素的关系:

YUV是利用一个亮度(Y)、两个色差(U,V)来代替传统的RGB三原色来压缩图像。传统的RGB三原色使用红绿蓝三原色表示一个像素,每种原色占用一个字节(8bit),因此一个像素用RGB表示则需要8*3=24bit。如果使用YUV表示这个像素,假设YUV的采样率为:4:2:0,即每一个像素对于亮度Y的采样频率为1,对于色差U和V,则是每相邻的两个像素各取一个U和V。对于单个的像素来说,色差U和V的采样频率为亮度的一半。如有三个相邻的像素,如果用RGB三原色表示,则共需要占用:8*3*3=72bits;如果采用YUV(4:2:0)表示,则只需要占用:8*3(Y)+ 8*3*0.5(U)+8*3*0.5(V)= 36bits。只需原来一半的空间,就可以表示原来的图像,数据率压缩了一倍,而图像的效果基本没发生变化。

一张图片,Y,U,V各有8Bit,RGB也是每个分量值都是8位,RGB是全部采样,YUV422采样就是 每个像素点都对Y采样,UV是依次进行采样。Yu,yv,yv,yv

y=100%,u=50%,v=50%

YUV420采样就是yu,y,yu,y,yv,y,yv,y换句话说 420,就是4的像素值,y=100%,u/v=50%

标签:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 中,可以通过 `Bitmap` 类来获取像素点,并且可以通过 `Bitmap` 提供的 `getPixel` 方法来获取指定位置的像素点的颜色值。获取到颜色值后,可以使用下面的公式将其转换为 YUV 值: Y = 0.299R + 0.587G + 0.114B U = -0.147R - 0.289G + 0.436B + 128 V = 0.615R - 0.515G - 0.100B + 128 其中,R、G、B 分别为红、绿、蓝三个颜色通道的值,范围为 0~255。Y、U、V 分别为 YUV 三个通道的值,其中 Y 的范围也是 0~255,而 U 和 V 的范围是 -128~127。 以下是一个将 Bitmap 转换为 YUV 数据的示例代码: ```java Bitmap bitmap = ...; // 获取 Bitmap 对象 int width = bitmap.getWidth(); int height = bitmap.getHeight(); int[] pixels = new int[width * height]; byte[] yuvData = new byte[width * height * 3 / 2]; // YUV 数据长度为像素点总数的 1.5 倍 bitmap.getPixels(pixels, 0, width, 0, 0, width, height); int index = 0; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { int color = pixels[i * width + j]; int r = (color >> 16) & 0xFF; int g = (color >> 8) & 0xFF; int b = color & 0xFF; int y = (int) (0.299 * r + 0.587 * g + 0.114 * b); int u = (int) (-0.147 * r - 0.289 * g + 0.436 * b + 128); int v = (int) (0.615 * r - 0.515 * g - 0.100 * b + 128); yuvData[index++] = (byte) y; if (i % 2 == 0 && j % 2 == 0) { yuvData[index++] = (byte) u; yuvData[index++] = (byte) v; } } } ``` 以上代码中,`width` 和 `height` 分别表示 Bitmap 的宽度和高度,`pixels` 数组用于存储 Bitmap 的像素点颜色值,`yuvData` 数组用于存储转换后的 YUV 数据。在获取像素点颜色值后,通过公式计算出 YUV 值,并将其存入 `yuvData` 数组中。需要注意的是,由于 U 和 V 的值只需要记录一半的像素点,因此在存储时需要根据像素点的位置确定是否需要存储 U 和 V 值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值