批量读取文件夹内MP4格式的视频,逐帧改变视频帧的大小,对R、G、B三个通道分别调用adapthisteq
函数进行直方图均衡,再将处理后的视频帧生成新的视频。
为了处理方便,自定义一个函数video_trans
专门用于对视频内容的处理:
function video_trans(src_file, dst_file)
[H, W] = deal(480, 640); % 设置视频帧的高和宽
src_v = VideoReader(src_file);
dst_v = VideoWriter(dst_file(1:end-4), 'MPEG-4'); % 设置所生成视频的格式
dst_v.FrameRate = src_v.FrameRate;
open(dst_v);
while hasFrame(src_v)
frame = readFrame(src_v); % 读取视频帧
frame(:,:,1) = adapthisteq(frame(:,:,1)); % 直方图均衡
frame(:,:,2) = adapthisteq(frame(:,:,2)); % 直方图均衡
frame(:,:,3) = adapthisteq(frame(:,:,3)); % 直方图均衡
frame = imresize(frame,[H,W],'bilinear'); % 调整图像大小
writeVideo(dst_v,frame); % 写入视频帧
end
close(dst_v);
end
再读取指定文件夹中的MP4视频文件,依次调用自定义函数video_trans
进行处理:
src_path = 'src_video\';
dst_path = 'dst_video\';
% 如果文件夹不存在则先创建保存视频的目录
if ~exist(dst_path, 'dir')
mkdir(dst_path);
end
dir_output = dir(fullfile(src_path,'*.mp4')); % 读取文件夹内的mp4格式的文件
file_names = {dir_output.name}; % 获取将所有文件名
n_files = length(file_names);
if (n_files >= 1)
for i = 1 : n_files
src_file = strcat(src_path, file_names{i}); % 注意file_names为cell类型
dst_file = strcat(dst_path, file_names{i}); % 应使用{}读取内容,()读取的仍是cell
video_trans(src_file, dst_file);
end
end