YUV数据介绍RGB转YUV代码 python
YUV介绍&RGB-YUV互转代码 python
@雪儿妹妹的求学路
-
yuv格式
一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析,所以,了解如何分析YUV数据流对于做视频领域的人而言,至关重要。
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽
FROM: http://blog.csdn.net/xu_fu/article/details/8988924 -
转换关系矩阵
YUV与RGB相互转换的公式如下(RGB取值范围均为0-255):Y = 0.299R + 0.587G + 0.114BU = -0.147R - 0.289G + 0.436BV = 0.615R - 0.515G - 0.100BR = Y + 1.14VG = Y - 0.39U - 0.58VB = Y + 2.03U
3.转换代码
import numpy as np
import cv2 as cvdef yuv2rgb(img):W = np.array([[1, 0., 1.13983],[1, -0.39465, -0.58060],[1, 2.03211, 0.]])imc = img.copy()imc = imc.astype(np.float)h, w, c = imc.shapefor i in range(h):for j in range(w):imc[i, j][1] -= 128 # Uimc[i, j][2] -= 128 # Vimc[i, j] = np.matmul(W, imc[i, j])imc = imc.astype(np.uint8)return imc
if __name__ == '__main__':img = cv.imread('0000.png', cv.IMREAD_UNCHANGED)im1 = cv.cvtColor(img, cv.COLOR_RGB2YUV)im2 = yuv2rgb(im1)im3 = cv.cvtColor(im1, cv.COLOR_YUV2RGB)cv.imshow('1', img)cv.imshow('2', im1)cv.imshow('3', im2)cv.imshow('4', im3)cv.waitKey(0)
图 1 是 RGB 图,图 2 是使用 opencv RGB2YUV 转的,图 3 是 代码YUV2RGB 转的结果,图 4 是使用 opencv 的 YUV2RGB 转的结果
参考:https://blog.csdn.net/weixin_39826080/article/details/111020966
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
