图像处理之基础---2个YUV视频 拼接技术
- /*************************************************
- * 主要功能:两路 YUV4:2:0拼接一路左右半宽格式YUV视频
- 参考资料:http://www.pudn.com/downloads271/sourcecode/multimedia/vfw/detail1237363.html
- U_size=V_size=Y_size/2
- *************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #define PREWEIGHT 1920
- #define PREHEIGHT 1080
- #define RESWEIGHT 3840
- #define RESHEIGHT 1080
- #define PREYSIZE ((PREWEIGHT)*(PREHEIGHT))
- #define PREUSIZE ((PREWEIGHT/2)*(PREHEIGHT/2))
- #define PREVSIZE ((PREWEIGHT/2)*(PREHEIGHT/2))
- #define RESYSIZE ((RESWEIGHT)*(RESHEIGHT))
- #define RESUSIZE ((RESWEIGHT/2)*(RESHEIGHT/2))
- #define RESVSIZE ((RESWEIGHT/2)*(RESHEIGHT/2))
- #define PRESIZE ((PREYSIZE)+(PREUSIZE)+(PREVSIZE))
- #define RESSIZE ((RESYSIZE)+(RESUSIZE)+(RESVSIZE))
- int GetFrameNum(const char *File)
- {
- FILE *fp;
- int size=0;
- if (!(fp=fopen(File,"rb")))
- {
- printf("Open %s error !",File);
- exit(1);
- }
- else
- {
- fseek(fp,0,SEEK_END);/*将文件指针移到YUV文件的末尾*/
- size=ftell(fp);/*计算文件的总大小*/
- }
- return (size/PRESIZE);
- }
- void ReadYUV(char *ResBuf,char *PreBuf,int resstart,int prestart,int resoffset,int preoffset,int size,int height)
- {
- int k;
- for (k=0;k<height;k++)
- {
- memmove(ResBuf+resstart+k*(resoffset),PreBuf+prestart+k*(preoffset),size);//注意这里用memmov不用strncpy
- }
- }
- int main(int argc,char *argv[])
- {
- const char *FileName[]={"e:\BMX_L_1920x1080_240frms.yuv","e:\BMX_R_1920x1080_240frms.yuv"};/*两路YUV文件名*/
- FILE *FileResult;/*输出文件名*/
- FILE** fp_combine=(FILE**)malloc(sizeof(FILE *)*3);/*申请文件指针*/
- int *FileFrameNum=(int *)malloc(sizeof(int)*3);/*每个YUV的帧数*/
- char *PreBuf=(char *)malloc(sizeof(char)*(PRESIZE+1));/*处理前每一帧图像的大小*/
- char *ResBuf=(char*)malloc(sizeof(char)*(RESSIZE+1));/*处理后每一帧图像的大小*/
- int Y_start_section=0;/*预处理图片Y分量存入目标区域的起始区域*/
- int U_start_section = 0;/*预处理图片U分量存入目标区域的起始区域*/
- int V_start_section = 0;/*预处理图片V分量存入目标区域的起始区域*/
- int File_offset = 0;/*预处理文件偏移值*/
- int i_combine=0,j_combine=0,k_combine=0;/*控制循环*/
- /*判断申请内存是否成功*/
- if (!((fp_combine)&&(FileFrameNum)&&(PreBuf)&&(ResBuf)))
- {
- printf("Allocate memeroy Faile !");
- exit(1);
- }
- /*初始化申请空间*/
- memset(fp_combine,0,sizeof(FILE *)*2);
- memset(FileFrameNum,0,sizeof(int)*2);
- memset(PreBuf,0,sizeof(char)*PRESIZE);
- memset(ResBuf,0,sizeof(char)*RESSIZE);
- if (!(FileResult=fopen("hua_result.YUV","wb")))/*创建输出文件*/
- {
- printf("Creat File faile !");
- exit(1);
- }
- for (i_combine=0;i_combine<2;i_combine++)
- {
- if(!(fp_combine[i_combine]=fopen(FileName[i_combine],"rb")))/*打开输入文件*/
- {
- printf("Open File %s Faile !",FileName[i_combine]);
- exit(1);
- }
- else
- {
- FileFrameNum[i_combine]=GetFrameNum(FileName[i_combine]);/*存储每一个视频的帧数*/
- }
- }
- i_combine=0;
- k_combine=FileFrameNum[i_combine];
- while (i_combine<k_combine)
- {
- File_offset = i_combine*PRESIZE;
- j_combine=0;
- while (j_combine<2)
- {
- fseek(fp_combine[j_combine],File_offset,SEEK_SET);/*移动文件指针至需要处理的数据的位置*/
- fread(PreBuf,1,PRESIZE,fp_combine[j_combine]);/*读取一幅图像*/
- if (j_combine==0)
- {
- /*把读取预处理图片Y/U/V分量的起始位置放置目标对应位置*/
- Y_start_section=0;
- U_start_section=RESYSIZE;
- V_start_section=RESYSIZE+RESUSIZE;
- }
- else
- {
- /*把读取预处理图片Y/U/V分量的起始位置放置目标对应位置*/
- Y_start_section=PREWEIGHT;
- U_start_section=RESYSIZE+PREWEIGHT/2;
- V_start_section=RESYSIZE+RESUSIZE+PREWEIGHT/2;
- }
- /*分别读Y、U、V*/
- ReadYUV(ResBuf,PreBuf,Y_start_section,0, RESWEIGHT,PREWEIGHT,PREWEIGHT,PREHEIGHT);
- ReadYUV(ResBuf,PreBuf,U_start_section,PREYSIZE, RESWEIGHT/2,PREWEIGHT/2,PREWEIGHT/2,PREHEIGHT/2);
- ReadYUV(ResBuf,PreBuf,V_start_section,PREYSIZE+PREUSIZE, RESWEIGHT/2,PREWEIGHT/2,PREWEIGHT/2,PREHEIGHT/2);
- j_combine++;
- }
- fwrite(ResBuf,1,RESSIZE,FileResult);
- fflush(FileResult);
- i_combine++;
- }
- fclose(fp_combine[0]);
- fclose(fp_combine[1]);
- fclose(FileResult);
- return 0;
- }
http://blog.csdn.net/huahuahailang/article/details/9040847
图像处理之基础---2个YUV视频 拼接技术的更多相关文章
- 2个YUV视频拼接技术
http://blog.csdn.net/huahuahailang/article/details/9040847 2个YUV视频拼接技术 http://zhongcong386.blog.163. ...
- 基于SURF特征的图像与视频拼接技术的研究和实现(一)
基于SURF特征的图像与视频拼接技术的研究和实现(一) 一直有计划研究实时图像拼接,但是直到最近拜读西电2013年张亚娟的<基于SURF特征的图像与视频拼接技术的研究和实现>,条 ...
- 使用D3D渲染YUV视频数据
源代码下载 在PC机上,对于YUV格式的视频如YV12,YUY2等的显示方法,一般是采用DIRECTDRAW,使用显卡的OVERLAY表面显示.OVERLAY技术主要是为了解决在PC上播放VCD而在显 ...
- FFmpeg YUV视频序列编码为视频
上一篇已经写了如何配置好开发环境,这次就先小试牛刀,来个视频的编码.搞视频处理的朋友肯定比较熟悉YUV视频序列,很多测试库提供的视频数据都是YUV视频序列,我们这里就用用YUV视频序列来做视频.关于Y ...
- 使用D3D渲染YUV视频数据<转>
源代码下载 转载地址:http://blog.csdn.net/dengzikun/article/details/5824874 源码地址:http://download.csdn.net/down ...
- 基于 IJKPlayer-concat 协议的视频无缝拼接技术实现
一.前言 Hi,大家好,我是承香墨影! 开门见山,开篇名义.今天来聊聊如何将多段视频,拼接成一个完整而连续的视频,然后无缝进行播放. 这样的需求应该不算偏门吧? 最简单的就是一些视频 App,会将大段 ...
- avi视频格式转yuv格式与播放yuv视频
因为要用到yuv格式视频.而眼下仅仅有avi格式的视频,所以须要转换,而且opencv不支持yuv编码的视频播放.所以须要转换为rgb编码.而后播放.写了两个程序.以供參考: 1,avi格式视频转yu ...
- 一些yuv视频下载地址
因为测试需要下载一些yuv视频地址,现存一个可以下载yuv视频的地址以备后用 http://trace.eas.asu.edu/yuv/index.html ftp://ftp.ldv.e-techn ...
- YUV视频格式详解(翻译自微软文档)
原文: https://docs.microsoft.com/en-us/previous-versions/aa904813(v=vs.80) YUV视频格式详解(翻译自微软文档)https://b ...
随机推荐
- po_文件格式[转]
原文: http://cpp.ezbty.org/content/science_doc/po_%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F 摘要:PO 是一种 GNU 定 ...
- 在C#中用RX库和await来实现直观的状态机
在程序的设计过程中,我们经常会遇到一些需要使用状态机的场景,相信状态机的编写和维护是令每一个程序员都非常头大的事情.到了C# 5.0后,由于引进了await语法糖,我们可以通过await和Reacti ...
- 关于Android导入开源项目:Error:Unable to load class 'org.gradle.api.publication.maven.internal.DefaultMavenFa
在导入开源项目时,有可能会要求需要maven插件,并报出一下错误: 对于没有安装maven插件的开发者来说,要去下载一个maven插件也许不困难,但是,有时候可能会像我一样懒,不去下载插件,那么我们可 ...
- git只拉取github部分代码的方法
需求:github某个项目所有代码太大,有600+M,甚至更大:只需要拉取部分代码,一是可以降低网络消耗,二是可以降低磁盘占用 分析了下空间占用情况:发现每个项目下的.git/objects/pack ...
- BP神经网络(手写数字识别)
1实验环境 实验环境:CPU i7-3770@3.40GHz,内存8G,windows10 64位操作系统 实现语言:python 实验数据:Mnist数据集 程序使用的数据库是mnist手写数字数据 ...
- SparkSQL的3种Join实现
引言 Join是SQL语句中的常用操作,良好的表结构能够将数据分散在不同的表中,使其符合某种范式,减少表冗余.更新容错等.而建立表和表之间关系的最佳方式就是Join操作. 对于Spark来说有3中Jo ...
- Linux学习之二十-Linux文件系统
Linux文件系统 文件系统的定义 文件系统是操作系统的必备软件,文件系统是对一个存储设备上的数据(block)和元数据(inode)进行组织的一种机制.文件系统可以帮助用户管理磁盘空间,进行文件的快 ...
- QT静态库和动态库的导出
因为静态库是不须要导出的.所以在写QT的前置声明的时候须要说明 #if defined(QT_SHARED) #ifdef COMMONLIB #define COMMONLIB_EXPORT Q_D ...
- sql取随机结果集
应用场景: 某日,接产品姐姐需求,网站搜索页在搜索特定的内容时候,会现实搜索不到结果!如衣服网站,搜索鞋子等.为了不直接呈现一个赤裸裸的无此商品页面,so,需要在搜索商品件数小于3时,在下面随机推荐本 ...
- perl学习笔记——输入与输出
读取标准输入 用<STDIN>进行标准输入:chomp($line=<STDIN>); 如果读到文件尾,行输入操作符就会返回undef.便可利用这一性质跳出循环. while( ...