这里不详细介绍YUV420, 简单的介绍一下,比如有一个 HxW 大小的图,如果是RGB颜色分量,那么每个通道都是HxW ,对于一个3通道的RGB来说,在传输的时候,所消耗的带宽是HxWx3。为了节省带宽,在视频传输,经常用的颜色通道是YUV420P, 这就意味着每4个Y共享1个U和V,这也相当于HxW 大小的Y通道,H x W x (1/4) 大小的U和 H x W x (1/4) 大小的V。这样即可节省一半的带宽。
假设有一个YUV视频(*.yuv),从yuv视频中读取帧的代码如下:
fp = open(videofile, 'rb')
filename = videofile.split('/')[-1][:-4]
framesize = height * width * 3 // 2
h_h = height // 2
h_w = width // 2
fp.seek(0, 2)
ps = fp.tell()
numfrm = ps // framesize
fp.seek(0, 0)
for i in range(numfrm):
print("%d/ %d"%(i, numfrm))
Yt = np.zeros(shape=(height, width), dtype='uint8')
Ut = np.zeros(shape=(h_h, h_w), dtype='uint8')
Vt = np.zeros(shape=(h_h, h_w), dtype='uint8')
for m in range(height):
for n in range(width):
Yt[m, n] = ord(fp.read(1))
for m in range(h_h):
for n in range(h_w):
Ut[m, n] = ord(fp.read(1))
for m in range(h_h):
for n in range(h_w):
Vt[m, n] = ord(fp.read(1))
img = np.concatenate((Yt.reshape(-1), Ut.reshape(-1), Vt.reshape(-1)))
img = img.reshape((height*3 // 2, width)).astype('uint8')
bgr_img = cv2.cvtColor(img, cv2.COLOR_YUV2BGR_I420)
在查阅opencv的手册 https://docs.opencv.org/3.4/de/d25/imgproc_color_conversions.html
发现:

但是这在YUV420上并不试用,经过实验,在COLOR_YUV2BGR_I420这个通道,用的是量化的转换公式
注意,此处尽管YUV的范围是0-255,但是依然按Y去减16去实现

参考链接:
[1] https://docs.opencv.org/3.4/de/d25/imgproc_color_conversions.html
[2] https://www.xuejiayuan.net/blog/648c43f3b53d415eb8061c181119e015
[3] https://github.com/jselbie/yuv420_to_rgb888/blob/master/yuv.py
Python OpenCV 图像格式转换:RGB与BGR互转”——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是RGB和BGR格式之间的转换。本文将详细介绍如何使用opencv-python库将图像从RGB格式转换为BGR格式以及从BGR格式转换为RGB格式。要实现图像格式转换的功能,首先需要安装OpenCV库。在安装完成后,我们可以使用cv2.cvtColor()方法完成RGB和BGR格式之间的转换。
本程序实现了简单的YUV数据之间的转换和YUV与RGB的转换。
注:1、本程序只是简单YUV之间的颜色空间转换和YUV与RGB的转换。
2、本程序使用的vs2019创建的,需使用2019打开工程。
3、包含功能:
1)YV12_2_I420;
2)I420_2_YV12;
3)NV12_2_I420;
4)I420_2_NV12;
5)NV21_2_YV12;
6)YV12_2_NV21;
7)I420_2_rgb32;
8)rgb32_2_I420;
9)I420_2_rgb24;
10)rgb24_2_I420。
大多数摄像机厂家的码流输出主流YUV420planar格式,即先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
但是在实际应用中发现虽同为YUV420p格式,仍存在一些差异。
如:大华摄像机的为YUV,而海康的为YVU,数据量一致,但UV数据位置反了。
所以在YUV转RGB的时候,采用OpenCV转换函数cv::cvtColor的转换类型也不一样,前者为CV_YUV2B...
YUV2RGB格式转换
最近在arm板子上做一个项目,arm板上采集的图像是YUV格式的,在后续的图像处理中需要用到RGB格式的图像。在网上查了很多YUV转RGB的资料,由于每个人得到的YUV的数据排列格式不一样,所以要找到适合自己工程的代码很不容易。其中有两篇博客里的资料对我有很大启发,这里向大家介绍一下。网址如下:
http://blog.csdn.net/drea
在数字图像处理种YUV格式也是我们经常遇到,与RGB一样也是一种编码格式,开始主要用于电视系统以及模拟视频领域。YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。如果没用UV信息,只有Y信息,也可以进行成像不过只是黑白的,这样就能很好解决彩色...
cv::Mat yuv, yuvI420, yuvYV12;
cv::cvtColor(img, yuv, cv::COLOR_BGR2YUV);
cv::cvtColor(img, yuvI420, cv::COLOR_BGR2YUV_I420);
cv::cvtColo...
设实际宽高为w*h的图像,如果是RGB格式,那么他的数据量为w*h*3;
如果是yuv420格式,那么他的数据量为w*h*1.5
因为yuv4:4:4的数据量等于RGB数据量,而yuv4:4:4是yuv4:2:0数据量的2倍,所以yuv4:2:0的数据量为w*h*3/2。
从yuv420sp转化得到rgb的步骤:
1.当我们拿到一帧图像的yuv原始数据后,首先需要明确拿到的是以下哪种yuv数据:yuv4:4:4、yuv4:2:2、yuv4:2:0。并且,我们都会知道给对应图像的宽和高,因为这都是驱动配置给
Can anyone help me to convert an RGB colour space image to YUV colour space image and to YCbCr colour space image using opencv Python?解决方案Use cv2.cvtColor(src, code) to convert Color-Space, the code s...
一、色彩空间的转换代码如下:#色彩空间转换import cv2 as cvdef color_space_demo(img):gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB转换为GRAY 这里的GRAY是单通道的cv.imshow("gray", gray)hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) #RGB...