YUV 8bit转10bit

这篇具有很好参考价值的文章主要介绍了YUV 8bit转10bit。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在有些场景中,我们经常会使用到YUV 8 bit转10bit的场景。
比如YUV420p 8bit 转 P010,P010le,YUV420p10le。

首先说ffmpeg 8 bit 转 10bit.
对于ffmpeg的P010le 和P010be 分别代表小端和大端,那么它转化的时候非常简单,就是8 bit再增加 8bit,后面的8bit全为0.
比如:
YUV 8bit转10bit,python

这是最简单的一种办法,所以如果你有一个转换后的10bitYUV,那么只要简单的去掉这个全为0的byte就可以了。
补充说明:
P010le和P010be 排列方式和NV12一样,是YYYY… UVUVUVUVUVU…
下面是一个简单python代码,将10bit P010le转换为8bit nv12:

import cv2 as cv
import numpy as np
import os

W = 1920
H = 1080

num=5
Y_planar = W*H*2
UV_planar = W*H

# p010 2 nv12
root = os.path.split(os.path.realpath(__file__))[0]
name = root + "\\dev-0-session-0-test10-p010.yuv"
fp = open(name, "rb")
fp2 = open(name+"-out.yuv","wb+")



for i in range(num):
    Y = fp.read(Y_planar)
    U = fp.read(UV_planar)

    Y = [int(x) for x in Y]
    U = [int(x) for x in U]

    YY = np.zeros(shape=(W*H), dtype='uint8', order='C')
    UV = np.zeros(shape=(int((W*H)/2)), dtype='uint8', order='C')

    for i in range(int(W*H-2)):
        YY[i]=Y[2*i + 1]
	# 单纯的把0x00抛弃掉
    for i in range(int((W*H-4)/4)):
        UV[2*i+0] = U[4*i+1]
        UV[2*i+1] = U[4*i+3]
    
    fp2.write(bytes(YY))
    fp2.write(bytes(UV))


fp.close()
fp2.close()

除了这种简单的增加一个字节的方式外,其实还有另外一种方式:
YUV 8bit转10bit,python

ffmpeg中的yuv420p10le就是这种方式。
燧远的y10,P010le就是这种方式。
下面一个脚本,可以将P010le的转为YUV420 8bit文章来源地址https://www.toymoban.com/news/detail-522075.html

import cv2 as cv
import numpy as np
import os

W = 1920
H = 1080

num=5
Y_planar = W*H*2
UV_planar = W*H

# p010 2 nv12
root = os.path.split(os.path.realpath(__file__))[0]
name = root + "\\dev-0-session-0-test10-p010le.yuv"
fp = open(name, "rb")
fp2 = open(name+"-out-yuv420p8bit.yuv","wb+")

y1 = np.zeros(shape=(H, W), dtype=np.uint8, order='C')
u1 = np.zeros(shape=(int(H/2), int(W/2)), dtype=np.uint8, order='C')
v1 = np.zeros(shape=(int(H/2), int(W/2)), dtype=np.uint8, order='C')

for i in range(num):
        for m in range(H):
            for n in range(W):
                msb = (ord(fp.read(1))>>2) 
                lsb = (ord(fp.read(1))<<6)
                y1[m,n] = msb | lsb
                
        for m in range(int(H/2)):
            for n in range(int(W/2)):
                msb = (ord(fp.read(1))>>2) 
                lsb = (ord(fp.read(1))<<6)
                u1[m,n] = msb | lsb

                msb = (ord(fp.read(1))>>2) 
                lsb = (ord(fp.read(1))<<6)
                v1[m,n] = msb | lsb

        fp2.write(bytes(y1))
        fp2.write(bytes(u1))
        fp2.write(bytes(v1))
        


fp.close()
fp2.close()



到了这里,关于YUV 8bit转10bit的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LLM - Model Load_in_8bit For LLaMA

      LLM 量化是将大语言模型进行压缩和优化以减少其计算和存储需求的过程。 博主在使用 LLaMA-33B 时尝试使用量化加载模型,用传统 API 参数控制量化失败,改用其他依赖尝试成功。这里先铺下结论: ◆ Load_in_8bit ✔️ ◆ Load_in_4bit ❌ 直接 load_in_8bit=True 报错: 下载 Accelerate 继续

    2024年02月04日
    浏览(37)
  • ESP32在Arduino框架下采用SPI或8bit并口方式使用LVGL(v8.3)

    小相机,按一下能拍照,并将照片保存在sd卡中。 使用的时VSCode+PlatformIO进行开发(强力推荐,用了就回不去了),当然也可以使用ArduinoIDE进行开发。 具体怎么使用上述软件,网上有很多答案,可以自行查找。 ESP-IDF移植教程:点击这里 使用到的库: TFT_eSPI 和 lvgl 注: 8bi

    2024年02月05日
    浏览(51)
  • 显示器10bit

    显示器的参数有面板材质、屏幕比例、响应时间、刷新率、分辨率、色域等。   显示器bit是什么意思?越大越好吗? 我们知道显示器的色彩能力主要是三个参数决定的,分别为 色准、色域以及色深 。 色准:色准指的是显示器的色彩准确度; 色域:色域指的是显示器的色彩

    2024年02月03日
    浏览(46)
  • OpenCV显示10bit Raw数据

    参考:10 12 14bit图像存储格式,利用Opencv显示10bit Raw数据,并根据鼠标的移动显示对应位置的灰度值。其他bit位数的Raw数据方法类似。 代码实现: 结果: 红色箭头位置处的灰度值

    2024年02月20日
    浏览(33)
  • ubuntu中的系统消息中显卡显示llvmpipe (LLVM 10.0.0, 256 bits)

    这是我在使用ubuntu系统时出现的问题,网上搜到很多解决的办法,我是一顿操作,后来看到这位老哥的帖子解决了。 集Linux / Ubuntu+win10双系统安装记录(2):AMD核显驱动引发的问题 - 知乎上一篇中我们提到了 astroR2:Linux / Ubuntu+win10双系统安装记录(1):安装Ubuntu安装中出现了一系列

    2024年02月04日
    浏览(50)
  • python 读写16bit图像的四种方法

    应对超高清、HDR等图像增强类深度学习任务和专业图片处理任务时,我们需要对16bit图像进行读取、转tensor和保存等操作,这里总结出四种python实现的方法供参考~ 1.使用 imageio ,输出图像无压缩 2.使用 openCV, 输出图像的水平分辨率和垂直分辨率被压缩 3.使用 skimage,输出图像

    2024年02月13日
    浏览(42)
  • python生成24bit全彩RGB立方体的三维散点图

    生成一个 RGB 立方体的三维散点图。在这个立方体中,每个点代表一个不同的颜色,其位置由红色、绿色和蓝色通道的值决定。点的颜色则直接反映了其在 RGB 空间中的位置。 X轴代表红色通道。Y轴代表绿色通道。 Z轴代表蓝色通道。 每个点的颜色是根据其在这三个颜色通道中

    2024年01月19日
    浏览(48)
  • 浅析YUV422/YUV420模式

    有两种理解: 每4个像素,Y分量采样4次,U分量采样2次,V分量采样2次,即每2个Y分量共享一组UV分量。若每个色彩分量, 存储长度 为1Byte(8bit),则一个像素点占用总长度为:(1byte*4 + 1byte*2 + 1byte*2)/4 = 2bytes 在[Y0 U0 Y1 V0](32bit)中,Y0U0V0 组成第一个像素, Y1U0V0 组成第二个像素

    2024年02月07日
    浏览(37)
  • 【音视频原理】图像相关概念 ⑦ ( YUV 跨距 Stride 对齐 | YUV 跨距 概念 | YUV 跨距对齐 概念 | YUV 跨距 Stride 对齐示例 )

    Stride 跨距 , 指的是 在 内存中 每行像素 占用的空间 , 由于 系统 对 图像有 跨距对齐 的要求 , 这个 Stride 跨距 可能 大于等于 实际的 图像像素 所占用的 宽度 ; 分辨率为 638 x 480 的 RGB24 格式的图片 , 内存处理时 以 16 字节对齐 ; RGB24 格式中 R ( 红 ) / G ( 绿 ) / B ( 蓝 ) 每个分量占

    2024年02月19日
    浏览(48)
  • YUV图片查看器以及测试文件(YUV420)

    参考文章:YUV格式的图片查看工具YUView 2.13 亲测可用 在windows上解压打开即可 需要输入一下宽高,如果格式不对,需要设置下格式 还可以看像素分量值,爽歪歪 YUV查看器和YUV测试文件 本文将深入探讨YUV图片查看器以及与之相关的测试文件(特别是YUV420格式)。我们将首先理

    2024年02月07日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包