c 生成任意尺寸YUV420P格式水平垂直彩条

因为先控制生成的是像素三基色,所以可以用此方法生成任何图案。如直线,圆,甚至汉字

可以把长宽围成的图案看成是一个大的二维数组,再从其中扣出一部分,再填充一部分就成了。可惜现在jpeg编码程序有错误,显示始终不正常。否则就可用此程序编写图片的扣图,拼图,加字,打码赛克等,甚至图片的缩放。

生成的yuv420p格式图片可直接用ffplay -s  长*宽  -i  文件名  直接播放


#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h>  
#include <string.h>
#include <sys/mman.h>
#include <linux/fb.h>#define  pic_width  640
#define  pic_heigth  480#define  file  "/home/wjs/Pictures/1280×720.rgb"
#define  file1 "/home/wjs/Pictures/sample.yuv"
int sp[pic_width*pic_heigth];
int sp1[pic_width*pic_heigth];int main(void)
{int t=0;for(int a=0;a<pic_heigth/4;a++){for(int b=0;b<pic_width;b++){     sp1[t]=0xff<<16|0x0<<8|0x0;      t++;}}for(int a=0;a<pic_heigth/4;a++){for(int b=0;b<pic_width;b++){sp1[t]=0xff<<16|0xff<<8|0xff;     t++;}}for(int a=0;a<pic_heigth/4;a++){for(int b=0;b<pic_width;b++){       sp1[t]=0xff<<16|0xff<<8|0xff;t++;}}for(int a=0;a<(pic_heigth/4);a++){for(int b=0;b<pic_width;b++){sp1[t]=0xff<<16|0xff<<8|0xff;     t++;}}/*	for(int a=0;a<pic_heigth;a++){            //生成垂直彩条for(int b=0;b<pic_width;b++){if(b<pic_width/2){sp1[t]=0xff<<16|0xff<<8|0xff;}else{sp1[t]=0xff<<16|0x0<<8|0x0;}t++;}}*/FILE *f=fopen(file,"w+b");           //生成RGB文件  fwrite(sp1,t*4,1,f);                   fclose(f);int sp2[pic_width*pic_heigth]={};   //读入RGB文件FILE *fo=fopen(file,"rb");             fread(sp2,t*4,1,fo);fclose(fo);
//--------------------------------------------------------/*	RGB ת»»³É YUVY = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16              Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128YUV ת»»³É RGBB = 1.164(Y - 16) + 2.018(U - 128)G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)R = 1.164(Y - 16) + 1.596(V - 128)*/
//-------------------------------------------unsigned char o_yuv[4*pic_width*pic_heigth]={};for(int a=0;a<pic_width*pic_heigth;a++){int Y=0,B=0,G=0,R=0;R=(sp2[a])>>16;G=(sp2[a]&0b1111111100000000)>>8;B=(sp2[a])&0b11111111;Y=(0.257*R)+(0.504*G)+(0.098*B)+16;if(Y>0xff)  Y=0xff;if(Y<0)     Y=0;o_yuv[a]=(unsigned char)Y;	                   }int nu=0;for(int a=0;a<pic_heigth;a=a+2){for(int c=0;c<pic_width;c=c+2){int U=0,B=0,G=0,R=0;R=(sp2[a*pic_width+c+1])>>16;G=(sp2[a*pic_width+c+1]&0b1111111100000000)>>8;B=(sp2[a*pic_width+c+1])&0b11111111;U=-(0.148*R)-(0.291*G)+(0.439*B)+128;if(U>0xff)  U=0xff;if(U<0)     U=0;o_yuv[pic_width*pic_heigth+nu]=(unsigned char)U;	 nu++;}}int nv=0;for(int a=0;a<pic_heigth;a=a+2){for(int c=0;c<pic_width;c=c+2){int V=0,B=0,G=0,R=0;R=(sp2[a*pic_width+c+1])>>16;G=(sp2[a*pic_width+c+1]&0b1111111100000000)>>8;B=(sp2[a*pic_width+c+1])&0b11111111;V=(0.439*R)-(0.368*G)-(0.071*B)+128;if(V>0xff)  V=0xff;if(V<0)     V=0;o_yuv[pic_width*pic_heigth*5/4+nv]=(unsigned char)V;	   nv++;}}
//-------------------------------------------------------FILE *of=fopen(file1,"w+b");fwrite(o_yuv,pic_width*pic_heigth*3/2,1,of);fclose(of);return 0;
}

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Open3D AABB包围盒计算与使用(19)

Open3D AABB包围盒计算与使用(19) 一、算法速览二、算法实现1.代码2.结果少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。 一、算法速览 AABB包围盒就是将点云用一个各条边沿着坐…

OceanBase架构概览

了解一个系统或软件&#xff0c;比较好的一种方式是了解其架构&#xff0c;下图是官网上的架构图&#xff0c;基于V 4.2.1版本 OceanBase 使用通用服务器硬件&#xff0c;依赖本地存储&#xff0c;分布式部署在多个服务器上&#xff0c;每个服务器都是对等的&#xff0c;数据库…

翻译: Streamlit从入门到精通 基础控件 一

这个关于Streamlit的教程旨在帮助数据科学家或机器学习工程师&#xff0c;他们不是网络开发者&#xff0c;也不想花费数周时间学习使用这些框架来构建网络应用程序。 1. 什么是Streamlit&#xff1f; Streamlit是一个免费且开源的框架&#xff0c;用于快速构建和共享美观的机器…

nodejs中的共享资源和锁

在Node.js中&#xff0c;如果你使用锁来同步代码&#xff0c;通常是为了防止多个线程或进程同时访问共享资源&#xff0c;这可能导致数据不一致或其他问题。然而&#xff0c;Node.js本身并不是一个多线程环境&#xff0c;而是单线程的。因此&#xff0c;你通常不会在Node.js中使…

[小程序]定位功能实现

第一步:首先要认识三个小程序的 api wx.chooseLocation 和 wx.getLocation 和 wx.openLocation (1).wx.chooseLocation 用于在小程序中选择地理位置。当用户点击选择位置按钮时&#xff0c;小程序会调起地图选择界面&#xff0c;用户可以在地图上选择一个位置&#xff0c;并可以…

ubuntu连接xshell怎么连接

在网上找了好多办法都不行 例如 太久没打开Ubuntu可能输入命令查不到IP地址&#xff0c;解决办法也比较简单&#xff0c;首先第一步 确定自己能不能进入管理员root权限&#xff08;输入命令su&#xff09;&#xff0c;如果没有的话得重新配置&#xff0c;如下图 这是因为当前Ub…

gin切片表单验证

在Gin中对切片进行表单验证的步骤与对其他类型的字段进行验证类似。以下是一些基本步骤&#xff0c;我们可以根据具体的需求进行调整&#xff1a; 定义结构体&#xff1a; 创建一个结构体&#xff0c;用于存储表单数据。确保结构体中的字段类型与你预期的表单数据类型一致。 使…

【DP】583.两个字符串的删除操作

题目 法1&#xff1a;DP 本质是不带替换操作的最小编辑距离问题&#xff01;&#xff01;&#xff01; class Solution {public int minDistance(String word1, String word2) {int m word1.length() 1, n word2.length() 1;int[][] dp new int[m][n];for (int i 1; i…

LINUX基础第十一章:文件系统与日志服务管理

目录 一.LINUX文件系统 1.inode表和block &#xff08;1&#xff09;inode &#xff08;2&#xff09;block 2.查看inode号命令 3.Linux系统文件三种主要时间属性 4.磁盘空间还剩余很多但无法继续创建文件 5.inode大小 二.日志 1.日志保存位置 2.日志文件的分类 &am…

Java设计模式-备忘录模式

备忘录模式 一、概述二、结构三、案例实现&#xff08;一&#xff09;“白箱”备忘录模式&#xff08;二&#xff09;“黑箱”备忘录模式 四、优缺点五、使用场景 一、概述 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&…

超越GPU:TPU能成为接班人吗?

在计算机的世界里&#xff0c;硬件技术的发展一直在快速推进。今天&#xff0c;我们要谈论的就是一种特殊的处理器&#xff1a;TPU&#xff0c;全称是Tensor Processing Unit。在我们开始深入探讨TPU之前&#xff0c;先了解一下两个重要的芯片技术&#xff0c;FPGA和ASIC。 FP…

【Matlab】加载路径下所有指定文件

加载路径下指定文件 想用matlab加载路径下所有指定文件&#xff0c;比如加载一个路径下的所有png图像、txt文件等&#xff0c;网上查了一圈也不是很好用&#xff0c;解决了问题就分享一下。 dir函数 用到了dir函数&#xff0c;Matlab中的dir函数是可以列出指定文件夹中的所有…

【算法题】52. N 皇后 II

题解 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;2 解释&#xff1a;如上图所示…

计算机网络 —— 数据链路层

数据链路层 3.1 数据链路层概述 数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把收到的帧数据取出并上交给网络层。链路层属于计算机网络的底层。数据链路层使用的信道主要由以下两种类型&#xff1a; 点对点通信。广播通信。 数据链路和帧 链路&…

DHCP详解(配置小实验)

目录 一、DHCP 1、了解DHCP 2、使用DHCP的好处 3、HDCP的分配方式 4、DHCP协议中的报文 5、DHCP的租约过程 6、安装和配置DHCP服务 一、DHCP 1、了解DHCP DHCP(Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议)由Internet工作任务小组设计开发专门用…

java每日一题——ATM系统编写(答案及编程思路)

前言&#xff1a; 基础语句学完&#xff0c;也可以编写一些像样的程序了&#xff0c;现在要做的是多加练习&#xff0c;巩固下知识点&#xff0c;打好基础&#xff0c;daydayup! 题目&#xff1a;模仿银行ATM系统&#xff0c;可以创建用户&#xff0c;存钱&#xff0c;转账&…

2023-12-02 青少年软件编程(C语言)等级考试试卷(五级)解析

2023-12-02 青少年软件编程(C语言)等级考试试卷(五级)解析 一、编程题(共4题,共100分)T1. 书架 John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。 John共有N头奶牛(1 ≤ N ≤ 20,000),每头奶牛有自己的高度Hi(1 ≤ Hi ≤ 10,000),…

Python 二维平面Delaunay三角网建立

目录 一、算法概念二、代码实现三、结果示例根据二维平面内的离散点建立平面三角网。 一、算法概念 三角剖分与Delaunay剖分定义:如何把一个散点集剖分成不均匀的三角形网格,即在给定的平面点集上,生成三角形集合的过程。考虑平面点集P={p1,p2,p3,…,pn},我们希望得到三…

基于Matlab/Simulink开发自动驾驶的解决方案

文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶&#xff0c;能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能&#xff0c;从而推进自动驾驶感…

QuEra 10,000个物理量子位和100个逻辑量子位的量子计算机2026

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…