资源简介
本算法可实现yuv420读取;yuv420显示;yuv420文件指定帧中指定指定区域显示并保存
代码片段和文件信息
#include
#include
#include
#include
#define WIDTH 3840 //YUV文件宽度
#define HEIGHT 1920 //yuv文件高度
using namespace std;
/*可能提示fopen不可用,在解决方案-项目 =》属性 =》c/c++ =》预处理器=》点击预处理器定义,编辑,加入_CRT_SECURE_NO_WARNINGS,即可。*/
int main()
{
int cut_frame = 0; //需要截取的第n帧
int shift = WIDTH*HEIGHT * 3 / 2;//WIDTH*HEIGHT * 3 / 2
int len_X = 160; //截取区域x方向长度
int len_Y = 120; //截取区域Y方向长度
int len_X_half = len_X / 2;
int len_Y_half = len_Y / 2;
int sum_read = len_X*len_Y;
int sum_gray = WIDTH*HEIGHT;
int cut_topleft_coordX = 1340;//设置截取区域左上角x坐标
int cut_topleft_coordY = 720; //左上角y坐标
int j = 0;
int k = 0;
int w = 0;
FILE *pfile;
FILE *savefile;
pfile = fopen(“E:\\about_ROI\\C_glacierQp22_frame8.yuv“ “r“);
savefile = fopen(“E:\\about_ROI\\Cut_C_glacierQp22_frame8.yuv“ “wb+“);
if (pfile == NULL)
{
printf(“error input!!“);
}
unsigned char* buffer = new unsigned char[WIDTH*HEIGHT * 3 / 2]();
unsigned char* buffer_Y = new unsigned char[len_X*len_Y]();
unsigned char* buffer_U = new unsigned char[len_X*len_Y / 4]();
unsigned char* buffer_V = new unsigned char[len_X*len_Y / 4]();
unsigned char* target_YUV = new unsigned char[len_X*len_Y * 3 / 2]();
fseek(pfile shift * cut_frame SEEK_SET); //将文件指针移动到第4帧开头处
fread(buffer 1 shift pfile); //将整个第4帧存储在内存中
for (int i = cut_topleft_coordY; i < len_Y + cut_topleft_coordY; i++) //拷贝Y分量信息
{
memcpy(buffer_Y + j*len_X buffer + cut_topleft_coordX + i*WIDTH len_X);
j++;
}
for (int i = cut_topleft_coordY / 2; i < (len_Y + cut_topleft_coordY) / 2; i++)//拷贝U分量信息
{
memcpy(buffer_U + k*len_X / 2 buffer + WIDTH*HEIGHT + cut_topleft_coordX / 2 + i*WIDTH / 2 len_X / 2);
k++;
}
for (int i = cut_topleft_coordY / 2; i < (len_Y + cut_topleft_coordY) / 2; i++)
{
memcpy(buffer_V + w*len_X / 2 buffer + WIDTH*HEIGHT + WIDTH*HEIGHT / 4 + cut_topleft_coordX / 2 + i*WIDTH / 2 len_X / 2);
w++;
}
memcpy(target_YUV buffer_Y len_X*len_Y);
memcpy(target_YUV + len_X*len_Y buffer_U len_X*len_Y / 4);
memcpy(target_YUV + len_X*len_Y + len_X*len_Y / 4 buffer_V len_X*len_Y / 4);
free(buffer_Y);
free(buffer_V);
free(buffer_U);
fwrite(target_YUV 1 len_X*len_Y * 3 / 2 savefile);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-12-04 12:23 YUV_ROI\
目录 0 2017-12-04 12:17 YUV_ROI\Debug\
文件 62976 2017-12-04 12:17 YUV_ROI\Debug\YUV_ORI.exe
文件 320012 2017-12-04 12:17 YUV_ROI\Debug\YUV_ORI.ilk
文件 774144 2017-12-04 12:17 YUV_ROI\Debug\YUV_ORI.pdb
文件 56 2017-12-04 12:24 YUV_ROI\README.txt
目录 0 2017-12-04 12:21 YUV_ROI\YUV_ORI\
文件 7274496 2017-12-04 12:21 YUV_ROI\YUV_ORI.sdf
文件 967 2017-12-04 12:04 YUV_ROI\YUV_ORI.sln
文件 17920 2017-12-04 12:21 YUV_ROI\YUV_ORI.v12.suo
目录 0 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\
文件 240640 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\vc120.idb
文件 323584 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\vc120.pdb
文件 1282 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.log
目录 0 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\
文件 670 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\cl.command.1.tlog
文件 5438 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\CL.read.1.tlog
文件 400 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\CL.write.1.tlog
文件 1070 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\li
文件 2358 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\li
文件 372 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\li
文件 158 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\YUV_ORI.tlog\YUV_ORI.lastbuildstate
文件 111177 2017-12-04 12:17 YUV_ROI\YUV_ORI\Debug\yuv_ROI.obj
文件 4270 2017-12-04 12:17 YUV_ROI\YUV_ORI\YUV_ORI.vcxproj
文件 948 2017-12-04 12:13 YUV_ROI\YUV_ORI\YUV_ORI.vcxproj.filters
文件 2431 2017-12-04 12:21 YUV_ROI\YUV_ORI\yuv_ROI.cpp
评论
共有 条评论