码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python opencv把yuv格式转bgr


    1、yuv格式简介

    yuv格式不同于bgr。
    YUV ,指的是 YCbCr,其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。
    根据采样方式以及排列方式分了好多种细致的格式,常用的有yuyv422等。
    https://zhuanlan.zhihu.com/p/384455058

    2、yuyv422转jpg

    转格式之前必须只有yuyv的长和宽,以5120960举例
    ffmpeg
    ffmpeg -loglevel error -y -s 5120
    960 -pix_fmt yuyv422 -i 4366.yuv -frames:v 1 4366.jpg
    opencv

    def convert_yuyv422(yuv_file, yuv_shape=(1920, 720)):
        h, w = yuv_shape
        yuv_file = open(yuv_file, 'rb')
        frame_len = h * w * 2
        shape = (w, h, 2)  # 用于yuyv2长度为w*h*2
        raw = yuv_file.read(int(frame_len))
        yuv = np.frombuffer(raw, dtype=np.uint8)
        yuv = yuv.reshape(shape)
        bgr = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR_YUYV)
        cv2.imwrite('cv2.jpg', bgr)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    下列链接有更本质的方法,但是太慢了不推荐。
    https://blog.csdn.net/qq_36917144/article/details/120505174

    3、yuv bgr888编码转jpg

    yuv本质上没有bgr888的格式,所以这种只是把bgr888编码的存为了yuv而已
    ffmpeg
    ffmpeg -s 1920x720 -pix_fmt bgr24 -i 4399.yuv -frames:v 1 4399.jpg
    python

    def yuvbgr888_to_bgr(yuv_file, yuv_shape=(1920, 720)):
        h, w = yuv_shape
        yuv_file = open(yuv_file, 'rb')
        frame_len = h * w * 3
        shape = (w, h, 3)  # 用于yuv转bgr,对于yuyv格式,需要2通道
        raw = yuv_file.read(int(frame_len))
        yuv = np.frombuffer(raw, dtype=np.uint8)
        yuv = yuv.reshape(shape)
        cv2.imwrite('cv2.jpg', yuv)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4、另一种实现

    def yuvbgr888(yuv_file, yuv_shape=(1920, 720)):
        img = np.fromfile(yuv_file, dtype='uint8')
        h, w = yuv_shape
        img = img.reshape(w, h, 3)
        cv2.imwrite('cv2.jpg', img)
    
    def yuyv422_to_bgr2(yuv_file, yuv_shape=(1920, 720)):
        h, w = yuv_shape
        shape = (w, h, 2)  # 用于yuv转bgr,对于yuyv格式,需要2通道
        yuv = np.fromfile(yuv_file, dtype='uint8')
        yuv = yuv.reshape(shape)
        bgr = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR_YUYV)
        cv2.imwrite('cv2.jpg', bgr)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    【机器学习算法】关联规则-3 关联规则的指标问题和关联规则的使用方法
    git仓库代码克隆
    螺母加工工艺流程
    【论文笔记】Diffusion-based 3D Object Detection with Random Boxes
    20. 有效的括号 --力扣 --JAVA
    基于Unity3D实现的HitUFO鼠标打飞碟游戏
    【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明
    kong的安装以及简单配置
    易动纷享--测试实习生视频面试
    github desktop上传代码
  • 原文地址:https://blog.csdn.net/yang_daxia/article/details/127670134
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号