python实现YUV422转RGBhttps://blog.csdn.net/amateur_hy/article/details/89641479
https://blog.csdn.net/amateur_hy/article/details/89641479
相机拍摄的原始YUV422格式数据,排列方式为YUYV
读取及转换代码:
alive_progress和alive_it是执行循环时显示进度条用的,电脑太卡了一个for循环要遍历一万年等的无聊
import cv2
import numpy as np
from alive_progress import alive_it
#读取YUV格式图像文件
def read_yuv422(image_path, rows, cols):
:param image_path: 待转换的.yuv图像文件路径
:param rows: 图像行数
:param cols: 图像列数
:return: y,u,v分量
# 创建y分量
img_y_1 = np.zeros((rows, int(cols/2)), np.uint8)
img_y_2 = np.zeros((rows, int(cols / 2)), np.uint8)
img_y = np.zeros((rows, cols), np.uint8)
# 创建u分量
img_u = np.zeros((rows, int(cols / 2)), np.uint8)
# 创建v分量
img_v = np.zeros((rows, int(cols / 2)), np.uint8)
# 读取内存中数据
with open(image_path, 'rb') as reader:
for i in alive_it(range(rows)):
for j in alive_it(range(int(cols/2))):
img_y_1[i, j] = ord(reader.read(1))
img_u[i, j] = ord(reader.read(1))
img_y_2[i, j] = ord(reader.read(1))
img_v[i, j] = ord(reader.read(1))
for i in alive_it(range(rows)):
for j in alive_it(range(int(cols/2))):
img_y[i, 2*j] = img_y_1[i, j]
img_y[i, 2*j+1] = img_y_2[i,j]
return img_y, img_u, img_v
#把YUV格式数据转换为RGB格式
def yuv2rgb422(y, u, v):
:param y: y分量
:param u: u分量
:param v: v分量
:return: rgb格式数据以及r,g,b分量
rows, cols = y.shape[:2]
# 创建r,g,b分量
r = np.zeros((rows, cols), np.uint8)
g = np.zeros((rows, cols), np.uint8)
b = np.zeros((rows, cols), np.uint8)
for i in alive_it(range(rows)):
for j in alive_it(range(int(cols/2))):
r[i, 2 * j] = max(0,min(255,y[i, 2 * j] + 1.402 * (v[i, j] - 128)))
g[i, 2 * j] = max(0,min(255,y[i, 2 * j] - 0.34414 * (u[i, j] - 128) - 0.71414 * (v[i, j] - 128)))
b[i, 2 * j] = max(0,min(255,y[i, 2 * j] + 1.772 * (u[i, j] - 128)))
r[i, 2 * j+1] = max(0,min(255,y[i, 2 * j+1] + 1.402 * (v[i, j] - 128)))
g[i, 2 * j+1] = max(0,min(255,y[i, 2 * j+1] - 0.34414 * (u[i, j] - 128) - 0.71414 * (v[i, j] - 128)))
b[i, 2 * j+1] = max(0,min(255,y[i, 2 * j+1] + 1.772 * (u[i, j] - 128)))
rgb = cv2.merge([b, g, r])
return rgb, r, g, b
img_yuv=read_yuv422("test.yuv",480,640)
cv2.imshow("YUV_Y",img_yuv[0])#显示从文件提取出的Y分量
img_rgb=yuv2rgb422(img_yuv[0],img_yuv[1],img_yuv[2])
cv2.imshow("RGB",img_rgb[0])
cv2.waitKey(0)
参考:python实现YUV422转RGBhttps://blog.csdn.net/amateur_hy/article/details/89641479相机拍摄的原始YUV422格式数据,排列方式为YUYV读取及转换代码:alive_progress和alive_it是执行循环时显示进度条用的,电脑太卡了一个for循环要遍历一万年等的无聊import cv2import numpy as npfrom alive_progress import alive_it#读取.
对于
YUV
图片和
RGB
565这类的图片,图片查看可以在网站http://rawpixels.net/上在线查看,不过需要的是原始数据,不能是压缩格式。
代码中有的部分使用的
opencv
,主要就是方便啦,老大说
opencv
也挺好,不要都自己造轮子,但为了理解图片格式,部分代码还是没有使用
opencv
的。
• 1:
YUV
420转
RGB
A8888
//change
yuv
I420 to
rgb
8...
Python
读取
YUV
格式文件,并使用
opencv
显示
的方法
opencv
可以
读取
的图片类型比较多,但大多是比较常见的类型,比如”.jpg”和”.png”,但它不能直接
读取
YUV
格式的文件,需要通过
python
读取
YUV
文件,并进行相应的
转换
后,才能被
opencv
读取
,并进行后续相应的处理.
话不多说,直接上程序。
import
cv
2
from numpy import *
import Image
screenLevels = 255.0
def
yuv
_import(filename,dims,numfrm,startfrm):
fp=
open
(filename,'rb')
# 将
yuv
422
格式的
图像
转换
为
RGB
图像
rgb
=
cv
2.
cv
tColor(
yuv
,
cv
2.COLOR_
YUV
2
RGB
_Y
422
)
# 保存
RGB
图像
cv
2.imwrite('output.jpg',
rgb
)
其中,`
cv
2.imread()`函数用于
读取
yuv
422
格式的raw
图像
,`
cv
2.
cv
tColor()`函数用于将
yuv
422
格式的
图像
转换
为
RGB
图像
,`
cv
2.imwrite()`函数用于保存
RGB
图像
。需要注意的是,`
cv
2.
cv
tColor()`函数的第二个参数需要设置为`
cv
2.COLOR_
YUV
2
RGB
_Y
422
`,表示将
YUV
422
格式的
图像
转换
为
RGB
格式的
图像
。