opencv显示yuv420,YV12视频文件
来源:互联网 发布:windows 3.0 编辑:程序博客网 时间:2024/06/05 07:03
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>#include <fstream>#include <boost/filesystem.hpp>#include <boost/thread.hpp>#include "generalImgFun.hpp"#include <math.h> using namespace std; using namespace cv; void WriteYuv() { cv::VideoCapture vc; bool flag = vc.open("S1000008.avi"); if (!flag) { printf("avi file open error \n"); system("pause"); exit(-1); } int frmCount = vc.get(CV_CAP_PROP_FRAME_COUNT); frmCount -= 5; printf("frmCount: %d \n", frmCount); int w = vc.get(CV_CAP_PROP_FRAME_WIDTH); int h = vc.get(CV_CAP_PROP_FRAME_HEIGHT); int bufLen = w*h*3/2; unsigned char* pYuvBuf = new unsigned char[bufLen]; FILE* pFileOut = fopen("result.yuv", "w+"); if (!pFileOut) { printf("pFileOut open error \n"); system("pause"); exit(-1); } printf("pFileOut open ok \n"); for (int i=0; i<frmCount; i++) { printf("%d/%d \n", i+1, frmCount); cv::Mat srcImg; vc>>srcImg; cv::imshow("img", srcImg); cv::waitKey(1); cv::Mat yuvImg; cv::cvtColor(srcImg, yuvImg, CV_BGR2YUV_I420); memcpy(pYuvBuf, yuvImg.data, bufLen*sizeof(unsigned char)); fwrite(pYuvBuf, bufLen*sizeof(unsigned char), 1, pFileOut); } fclose(pFileOut); delete[] pYuvBuf; } void DisplayYUV(int w,int h , int fps ,string yuv_file_path) { printf("yuv file w: %d, h: %d \n", w, h); FILE* pFileIn = fopen(yuv_file_path.c_str(), "rb+"); fseek(pFileIn, 0, SEEK_END); int frame_count = 0; frame_count = (int) ((int)ftell(pFileIn)/((w * h * 3) / 2)); // ftell 用于求文件大小 printf("frame num is %d \n", frame_count); fseek(pFileIn, 0, SEEK_SET);//文件内位置定位到文件头 int bufLen = w*h*3/2; unsigned char* pYuvBuf = new unsigned char[bufLen]; for(int i=0; i<frame_count; i++) { fread(pYuvBuf, bufLen*sizeof(unsigned char), 1, pFileIn); cv::Mat yuvImg; yuvImg.create(h*3/2, w, CV_8UC1); memcpy(yuvImg.data, pYuvBuf, bufLen*sizeof(unsigned char)); cv::Mat rgbImg; cv::cvtColor(yuvImg, rgbImg, CV_YUV2BGR_I420);// cv::imshow("yuv", yuvImg); cv::imshow("rgb", rgbImg); cv::waitKey(1000/fps); printf("cnt: %d \n", i); } delete[] pYuvBuf; fclose(pFileIn); }int main(int argc, char** argv){if(argc<4){cout<<"usage: ./yuv_checker yuv_file.yuv width height fps!"<<endl;exit(1);}stringstream ss; ss <<argv[2];int nWidth ;int nHeight;int fps ;ss >> nWidth ;ss.clear(); ss<<argv[3];ss >> nHeight ;ss.clear(); ss<<argv[4];ss >> fps ;cout <<" width:"<<argv[2]<<" height:"<<argv[3]<<" fps:"<<argv[4]<<" file:"<<argv[1]<<endl;DisplayYUV(nWidth,nHeight,fps,argv[1]);return 0;}
3 0
- opencv显示yuv420,YV12视频文件
- directdraw显示yuv420(YV12)
- YUV420 或 YV12 图像缩放
- YUV RGB YUV420 YV12基础
- yuv420 yv12 与RGB转换算法
- YUV420(I420)与YV12的区别,YUV420p与YUV420区别
- ffmpeg和opencv 播放视频文件并显示
- DivX/XviD -opencv 视频文件读取显示问题解决
- python opencv 读取视频文件并显示
- YV12转opencv IplImage
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示
- RGBA转化成YV12 或YUV420格式的源代码
- YV12和I420的区别 yuv420和yuv420p的区别
- 嵌入式 yuv、YCbCr、yuv420(yv12)、yuv422(yuv2) 常见采样格式
- YV12和I420的区别 yuv420和yuv420p的区别
- YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
- 【图像-视频处理】YUV420、YV12与RGB24的转换公式
- 视频存储格式YUV420 NV12 NV21 i420 YV12
- Ubuntu下 嵌入式Qt开发环境的搭建 .
- Redis内存使用优化与存储
- 实现ViewPager无限循环的方式二
- windows backup动态文件备份和恢复
- 7.13 Git 工具 - 替换
- opencv显示yuv420,YV12视频文件
- C Primer Plus学习 二十四 字符串输入 fgets ()函数
- PhotoViewSlider
- cd命令使用说明
- 关于mysql的事务的控制实验
- SIP穿越NAT SIP穿越防火墙
- Android关于Theme.AppCompat相关问题的深入分析
- Hadoop2.x入门讲解
- 八大排序算法自我实现