添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
奔跑的草稿纸  ·  How do you handle a ...·  1 年前    · 
灰常酷的猴子  ·  No CUDA runtime is ...·  1 年前    · 
卖萌的皮带  ·  python - Is it ...·  1 年前    · 

python实现YUV422转RGBhttps://blog.csdn.net/amateur_hy/article/details/89641479 icon-default.png?t=L892 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 格式的 图像