opencv 解析yuv_通过OpenCV读取并显示YUV视频文件
前言
Opencv中通常是读取 avi 格式的视频文件,下面程序是直接读取 YUV格式的视频文件并显示出来。 这里需要将YUV读取出来,使用Mat格式保存再使用 cv::cvtColor() 将每帧的 yuv 数据转化为 RGB格式 ,然后显示或者在RGB空间进行算法处理,并且可以再利用cv::cvtColor()将RGB数据转换成yuv数据并写到文件中保存。
1、参考
2、OpenCV读取并显示YUV视频文件int main(int argc, char* argv[])
{
Mat yuvImage, rgbImage, yuvSave;
int filelength = 0;
int framenum = 0;
if(argc < 6)
{
printf("usage: demo.exe yuvname yuvSavename width height procnum \n");
return -1;
}
const char* yuvname = argv[1];
const char* yuvSavename = argv[2];
int width = atoi(argv[3]);
int height = atoi(argv[4]);
int procnum = atoi(argv[5]);
FILE* file_in = fopen(yuvname, "rb");
if(NULL == file_in)
{
printf("ERROR: open %s failed!!!\n", yuvname);
return -1;
}
FILE* file_out = fopen(yuvSavename, "rb");
if(NULL == file_out)
{
printf("ERROR: open %s failed!!!\n", yuvSavename);
return -1;
}
fseek(file_in, 0 ,SEEK_END);
filelength = ftell(file_in);
framenum = filelength/(width*height*3/2);
printf("total framenum: %d\n", framenum);
fseek(file_in, 0, SEEK_SET);
unsigned char *pYUVBuf = (unsigned char*)malloc(width*height*3/2*sizeof(unsigned char));
if(NULL == pYUVBuf)
{
printf("ERROR: malloc pYUVBuf failed,0x%x!!!\n", pYUVBuf);
return -1;
}
yuvImage.create(height*3/2, width, CV_8UC1);
yuvSave.create(height*3/2, width, CV_8UC1);
namedWindow("src Image", CV_WINDOW_NOARMAL);
namedWindow("dst Image", CV_WINDOW_NOARMAL);
for(int i=0;i
{
fread(pYUVBuf,1,width*height*3/2, file_in);
memcpy(yuvImage.data, pYUVBuf, width*height*3/2);
cvtColor(yuvImage, rgbImage, CV_YUV2BGR_I420);
imshow("src Image", rgbImage);
// 算法处理
Mat finalImage;
imshow("dst Image", finalImage);
cvtColor(finalImage, yuvSave, CV_BRG2YUV_I420);
fwrite(yuvSave.data, 1, width*height*3/2, file_out);
}
destroyWindow("src Image");
destroyWindow("dst Image");
fclose(file_in);
fclose(file_out);
}
THE END!
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com
opencv 解析yuv_通过OpenCV读取并显示YUV视频文件相关推荐
- matlab显示YCrCb的图像,【Matlab系列】读取并显示YUV视频文件
Date: 2019-5-12 1.读取并显示YUV视频文件Matlab代码 %% 1.读取视频内容并显示 fid = fopen('akiyo_cif.yuv','r'); %读入YUV文件 row ...
- youcans 的 OpenCV 学习课—2.图像读取与显示
youcans 的 OpenCV 学习课-2.图像读取与显示 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 本节介绍图像的读取.保存和显示.除基本方法和例程外,还给出了从 ...
- Android 基于ffmpeg开发简易播放器 - EGL和OpenGLESGLES显示YUV视频
EGL和OpenGLESGLES显示YUV视频 1.EGL EGL是OpenGL ES与系统原始窗口的适配层: Display:用于与原生窗口建立连接. Surface:用于渲染的区域. Contex ...
- OpenCV 2.图像入门:读取、显示、保存
OpenCV 中文官方文档:http://woshicver.com/ 图像入门:读取.显示.保存 cv.imread(),cv.imshow(),cv.imwrite() cv.imread()函数 ...
- 使用DirectDraw直接显示YUV视频数据
最近在编写一个进行视频播放的ActiveX控件,工作已经接近尾声,现将其中显示YUV数据的使用DirectDraw的一些经验总结如下:(解码部分不是我编写的,我负责从网络接收数据,将数据传给解码器,并 ...
- opencv 学习第一课 图像读取、显示、写入 代码注释版 保证你每一行都能读懂
import numpy as np import cv2 as cvimg = cv.imread('cat.jpg',0) #读入图片 cv.imshow('image1',img) #显示图片 ...
- video读取服务器本地的视频文件,javascript-video.js无法读取本地视频
我有一个video.js播放器,并且刚接触网络. 我希望它阅读我的本地视频,但我收到一条消息: "很抱歉,此视频未找到兼容的源和播放技术." 但是:如果我使用video.js提供的 ...
- directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
原因是: DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分 ...
- hutool 读取扩展名文件_Python OpenCV视觉智能感知第一讲——读取摄像头或视频文件并播放显示...
Python OpenCV视觉智能感知 第一讲--读取摄像头或视频文件并播放显示 本部分内容将深入.全面.详细地介绍如何使用Anaconda Python和OpenCV读取摄像头或视频文件,并进行播放 ...
最新文章
- gradlew 的https代理设定
- echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角
- 汇编语言学习笔记-按指定的字体输出文本
- Luogu P2577 [ZJOI2005]午餐
- php system 执行失败,PHP 执行 system、exec 等函数发生错误
- Linux表空间扩容,linux下oracle表空间导致磁盘空间不足
- 清华大学python镜像_使用清华开源镜像安装tensorflow
- python 相关性检验怎么计算p值_不会Python进行时间序列预测?不要紧,大神来教你...
- Dlib 19.14发布——增加了一个训练RBF-SVM的auto-ML工具
- 关闭 IOS8 最近使用 最近联系人
- 【生信进阶练习1000days】day5-TxDb等注释包的使用
- Diamond programmer程序下载流程
- 汇川plc c语言,汇川小型PLC梯形图编程教程(十):输入输出继电器X和Y元件及常开常闭触点介绍...
- 从0搭建一个邮件服务器(用于邮件推送以及邮件群发业务)
- 自动控制原理7.1---离散系统的基本概念
- AVR单片机ATmega16之初识PWM模式
- 文件共享——HHFM
- 【精讲】vue数据绑定、数据内容的应用、数据结构、数据代理
- leetcode881.救生艇(中等)
- arnold 调用 mantra的光子 做GI全局光和caustic焦散