文章目录
- 1 前言
- 2 方案简述
- 3 效果
1 前言
最近做一个短视频相关的项目的时候,发现输入的视频有很多是有黑边的,有些可能是白边或者其他颜色的边。这对下游的模型处理有很大的影响。于是就写了一个自动判断填充边的颜色,并根据该颜色自动切割视频或者图片的小工具。这个真的挺方便的,所以就分享出来。
代码可见https://github.com/zjuPeco/color_base_image_crop。
2 方案简述
所有的颜色都是将rgb值映射到hsv空间后,再映射到事先总结好的一个颜色表当中。每个hsv对应颜色表中的一个名字。
针对视频的切割:
(1)读取视频的第一帧。
(3)如果没有指定背景色,根据图片的四个角的block,取众数推断背景色。block_size可设置。
(3)获取全图中每个像素点对应的颜色名称,得到mask。
(4)根据mask选择切割点,先按宽度方向找,再按高度方向找。
(5)视频所有帧都按该切割点切割。
(6)将切好的图片输出成指定尺寸。
针对图片的切割:
(1)如果没有指定背景色,根据图片的四个角的block,取众数推断背景色。block_size可设置。
(2)获取全图中每个像素点对应的颜色名称,得到mask。
(3)根据mask选择切割点,先按宽度方向找,再按高度方向找,再按宽度方向找。
(4)将切好的图片输出成指定尺寸。
3 效果
(1)切割视频,并按切割尺寸输出。
python3 codes/crop_video_by_color.py --input_video ./data/1.mp4 --output_video ./results/videos/1.mp4
(2)切割视频,并按resize后crop的方式输出成指定尺寸
python3 codes/crop_video_by_color.py --input_video ./data/1.mp4 --output_video ./results/videos/1_720x1080.mp4 --output_size 720x1080
(3)切割视频,并按resize后pad的方式输出到指定尺寸
python3 codes/crop_video_by_color.py --input_video ./data/1.mp4 --output_video ./results/videos/1_720x1080_pad.mp4 --output_size 720x1080 --pad_mode outside
python3 codes/crop_image_by_color.py --input_image ./data/5.jpeg --output_image_dir ./results/images/5/