MATLAB | 批量修改视频文件的视频帧大小并进行直方图均衡

批量读取文件夹内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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽墨志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值