2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24
一、简介:libyuv 最初是由Google开发的,主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数,用于转换、缩放、旋转和其他操作YUV图像数据。
二、执行下面的命令下载和安装libyuv。
git clone https://github.com/lemenkov/libyuv.git
cd libyuv
mkdir build && cd build
cmake ..
make
sudo make install

三、测试实例convert_yuv_to_rgb.cpp,使用c编译的时候,I420ToRGB24前面就不要有libyuv::。
#include <stdio.h>
#include <stdlib.h>
#include "libyuv/convert_from.h"
#include "libyuv/convert.h"int main() {FILE *input_file = fopen("cowboy_girl_1024X1280_yuv420p_i420.yuv", "rb");if (!input_file) {printf("Error opening input file.\n");return 1;}int width = 1024;int height = 1280;size_t uv_size = (width * height) / 2;uint8_t *yuv_data = (uint8_t *)malloc(width * height * 3 / 2);if (!yuv_data) {printf("Memory allocation error.\n");fclose(input_file);return 1;}fread(yuv_data, sizeof(uint8_t), width * height * 3 / 2, input_file);fclose(input_file);// Convert YUV to RGB24uint8_t *rgb_data = (uint8_t *)malloc(width * height * 3);if (!rgb_data) {printf("Memory allocation error.\n");free(yuv_data);return 1;}libyuv::I420ToRGB24(yuv_data, width, yuv_data + width * height, width / 2,yuv_data + width * height * 5 / 4, width / 2,rgb_data, width * 3, width, height);
/*libyuv::I420ToRAW(yuv_data, width, yuv_data + width * height, width / 2,yuv_data + width * height * 5 / 4, width / 2,rgb_data, width * 3, width, height);
*/// Save RGB image to fileFILE *output_file = fopen("output.rgb", "wb");if (!output_file) {printf("Error opening output file.\n");free(yuv_data);free(rgb_data);return 1;}fwrite(rgb_data, sizeof(uint8_t), width * height * 3, output_file);fclose(output_file);free(yuv_data);free(rgb_data);printf("Conversion complete.\n");return 0;
}
四、测试运行结果
g++ -o convert_yuv_to_rgb convert_yuv_to_rgb.cpp -lyuv
./convert_yuv_to_rgb

五、上面的测试得出的yuv文件显示出来的效果有点异常,R和B对换了,为啥呢?这个问题困扰了我许久。直到我看到我看到libyuv/include/libyuv/convert.h里面有这一段才豁然开朗,因为RGB24ToI420也是存在这个问题,解决方法是使用I420ToRAW、RAWToI420对换。
// RGB little endian (bgr in memory) to I420.
LIBYUV_API
int RGB24ToI420(const uint8_t* src_rgb24,int src_stride_rgb24,uint8_t* dst_y,int dst_stride_y,uint8_t* dst_u,int dst_stride_u,uint8_t* dst_v,int dst_stride_v,int width,int height);


六、如果运行的时候提示找不到libyuv.so库,按照下面的方法运行sudo ldconfig更新动态链接库缓存。也可以直接用gcc -o yuv yuv.c /usr/local/lib/libyuv.so这种编译形式。
编辑配置文件并使新安装的库生效:
sudo vi /etc/ld.so.conf
在末尾加入如下行:
include /usr/local/libsudo ldconfig
相关文章:
2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24
一、简介:libyuv 最初是由Google开发的,主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数,用于转换、缩放、旋转和其他操作YUV图像数据。 二、执行下面的命令下载和安装libyuv。 git clo…...
怎么给视频加水印?2招轻松搞定
在数字媒体时代,视频水印作为一种有效的版权保护手段,被广泛应用于各种场景。给视频添加水印不仅可以防止内容被恶意盗用,还能增加视频的辨识度,提升品牌形象。本文将为您介绍2种简单易行的方法,教您怎么给视频加水印&…...
SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 请求响应概述 1.1 简单参数 1.2 实体参数 2.3 数组集合参数 2.4 日期参数 2.5 json 参数 2.6 路径参数 3.0 完整代码 1.0 请求响应概述 当客户端发送不同的请求参…...
实验十 智能手机互联网程序设计(微信程序方向)实验报告
实验目的和要求 完成以下页面设计。 二、实验步骤与结果(给出对应的代码或运行结果截图) Wxml <view class"container"> <view class"header"> <view class"logo"…...
Python图形复刻——绘制母亲节花束
各位小伙伴,好久不见,今天学习用Python绘制花束。 有一种爱,不求回报,有一种情,无私奉献,这就是母爱。祝天下妈妈节日快乐,幸福永远! 图形展示: 代码展示: …...
【算法优选】 动态规划之子数组、子串系列——壹
文章目录 🎋前言🎋最大子数组和🚩题目描述🚩算法思路🚩代码实现 🌴环形子数组的最大和🚩题目描述🚩算法思路:🚩代码实现 🌲乘积最大子数组&#x…...
PXE+Kickstart无人值守安装安装Centos7.9
文章目录 一、什么是PXE1、简介2、工作模式3、工作流程 二、什么是Kickstart1、简介2、触发方式 三、无人值守安装系统工作流程四、实验部署1、环境准备2、服务端:关闭防火墙和selinux3、添加一张仅主机的网卡4、配置仅主机的网卡4.1、修改网络连接名4.2、配IP地址4…...
C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能
文章目录 前言一、注意二、源码1. test.c源文件2. contact.h头文件3. contact.c源文件 总结 前言 C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能 一、注意 在通讯录菜单栏使用枚举定义PeoInfo类型时,每个结构体类型的成员…...
flowable多对并发网关跳转的分析
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…...
【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输
【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输 Ymodem协议帧的数据格式帧头包号校验 通讯过程握手信号起始帧数据帧结束帧代码块 Ymodem命令 QT实现YmodemFileTransmit.hYmodemFileTransmit.cppBootLoader.hBootLoader.cppYmodem协议源码 Ymodem协议 帧的数据格式 帧头、…...
python笔记(17)输入输出
一、标准输入与输出简介 Python通过内置的sys模块管理标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。但对大多数简单应用而言,直接使用内置函数就足够了。 二、输入:inpu…...
408数据结构总结复习笔记一:线性表
408数据结构总结复习笔记一:线性表 从现在开始慢慢更新我的考研复习笔记系列吧~ PS:主要是我自己个人复习过程中觉得重点的点,大家仅供参考哈~ 上岸!!!大家一起加油! 顺序表和链表的比较 顺序表链表存取…...
Docker——目录迁移
我们在生产环境中安装Docker时,默认的安装目录是/var/lib/docker,而通常情况下,规划给系统盘的目录一般为50G,该目录是比较小的,一旦容器过多或容器日志过多,就可能出现Docker无法运行的情况,所…...
SpringAMQP-消息转换器
这边发送消息接收消息默认是jdk的序列化方式,发送到服务器是以字节码的形式,我们看不懂也很占内存,所以我们要手动设置一下 我这边设置成json的序列化方式,注意发送方和接收方的序列化方式要保持一致 不然回报错。 引入依赖&#…...
轻松拿下指针(5)
文章目录 一、回调函数是什么二、qsort使用举例三、qsort函数的模拟实现 一、回调函数是什么 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时&#x…...
Nginx反向代理配置
一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先,它充当了客户端与后端服务器之间的中介。当客户端发送请求时,这些请求先到达 Nginx 服务器,Nginx 会根据预先设定的规则和配置,将请求准确地转发到相应…...
突破编程界限:探索AI编程新境界
文章目录 一、AI编程助手1.1 Baidu Comate智能代码助手1.2 阿里云 通义灵码 二、场景需求三、体验步骤3.1 官网下载3.2 手动下载 四、试用感受4.1 提示4.2 注释生成代码4.3 代码生成4.4 选中生成注释4.5 查看变更&新建文件4.6 调优建议4.7 插件使用 五、结尾推荐 一、AI编程…...
C语言(指针)2
Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…...
go学习笔记
1基础搭建 1.1,安装vscode https://code.visualstudio.com/download 64位 1.2,Windows 下搭建Go 开发环境-安装和配置 SDK SDK 的全称(Software Development Kit 软件开发工具包) Go 语言的官网为:golang.org , 因为各种原因,可…...
MacApp自动化测试之Automator初体验
今天我们继续讲Automator的使用。 初体验 启动Automator程序,选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容,将获取指定的URL操作中的URL替换成https://www.cnb…...
Transformers 模型推理
Transformers 系列文章目录 第一章 Transformers 简介; 第二章 Transformers 模型推理 文章目录Transformers 系列文章目录前言Transformers模型推理一、Transformers读取预训练模型1.Transformers读取预训练模型,都是已经预训练好的,拿来即…...
AI助力!谷歌、苹果让手机开发与个性化定制更简单
App Store 的承诺与现状“有个应用程序能搞定”,这是 App Store 从一开始的承诺,用户轻点几下就能找到让手机实现所需功能的应用程序。不过,至今仍未出现完美的购物清单应用程序。尽管如此,应用程序的确将现代智能手机塑造成了如今…...
ICode竞赛Python三级通关秘籍:用if else控制飞船和机器人走迷宫
ICode竞赛Python三级通关秘籍:用if else控制飞船和机器人走迷宫 在ICode国际青少年编程竞赛的Python三级训练场中,掌握if else条件判断是解锁迷宫挑战的关键。不同于枯燥的语法练习,我们将通过飞船(Spaceship)和机器人(Dev)的视角,…...
全球化2.0 | ZStack亮相印尼云计算与数据中心大会 以新一代云底座助力数字印尼建设
近日,由 W.Media 主办的印尼云计算和数据中心大会(Indonesia Cloud & Data Center Convention 2026)在雅加达举行。云轴科技 ZStack受邀参会,与来自印尼及国际数据中心行业的专业人士共同探讨企业云底座的最新进展与未来趋势。…...
伺服电机电流环PI参数整定:从数学模型到工程实践
1. 项目概述:高带宽电流环设计的核心价值在伺服电机控制领域,追求极致的动态响应和稳态精度,是所有工程师的终极目标。上一期我们聊透了EtherCAT如何通过精准的同步信号(Sync)为整个控制系统打下坚实的时间基准&#x…...
供应链管理在管什么?终于有人把供应链管理讲明白了
我发现大家都把供应链管理想简单了,觉得它就是管采购砍价、或者管仓库理货,又或者是找物流发货。 你是不是也这么认为? 说白了,供应链管理根本不是单一环节的事,是从客户提出需求到最终签收的全流程的把控。这流程里…...
语音修复终极指南:如何用VoiceFixer在3分钟内拯救受损音频
语音修复终极指南:如何用VoiceFixer在3分钟内拯救受损音频 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 在数字时代,音频质量问题困扰着无数内容创作者、历史档案工作者和普…...
Steam Deck Tools 终极指南:Windows 掌机的完美伴侣
Steam Deck Tools 终极指南:Windows 掌机的完美伴侣 【免费下载链接】steam-deck-tools (Windows) Steam Deck Tools - Fan, Overlay, Power Control and Steam Controller for Windows 项目地址: https://gitcode.com/gh_mirrors/st/steam-deck-tools 还在为…...
20260518 Swift实验
Swift实验 控制节点新添加一块20GB磁盘 新添磁盘分成两个区,并格式化 分区一:挂载到obs1目录 分区二:挂载到obs2目录 [rootcontroller ~ 11:45:09]# fdisk /dev/sdbWelcome to fdisk (util-linux 2.32.1). Changes will remain in memory onl…...
如何用1条提示生成可商用超现实IP?:Midjourney商业级输出的6道合规校验流程(含版权链存证路径)
更多请点击: https://codechina.net 第一章:超现实IP的商业价值与Midjourney生成范式跃迁 超现实IP正从边缘创意实验走向主流商业基础设施——其核心驱动力并非单纯视觉奇观,而是对用户心智注意力的结构性重构。当品牌不再依赖写实叙事建立信…...
