資源簡介
本算法可實現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? {
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
評論
共有 條評論