写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我
热爱AI、热爱分享、热爱开源
! 这博客是我对学习的一点总结与记录。如果您也对深度学习、机器视觉、算法、Python、C++
感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github
前言:
在做深度学习目标检测项目中,有的时候需要自己制作图像数据集。一张张去拍图片是不太现实的做法。我们经常是先用相机拍取连续的视频,然后再将视频切成若干图片。下面就是我切分后的效果:
这篇文章主要来教大家如何实现视频与图像之间的互转。
一、视频转图像
由于连续视频相邻帧的图像相似度很高,这对于数据集来说并不是一件好的事情,所以可以隔帧取图像。在下面的示例中,我就是每隔10帧取一次。
Python 代码如下:
import cv2
def video2images(Video_Dir):
"""
function: video to pictures
author: AIJun
date:2021/3/17
"""
cap = cv2.VideoCapture(Video_Dir)
c = 1 # 帧数起点
index = 1 # 图片命名起点,如1.jpg
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
if c % 10 == 0:
cv2.imwrite('pictures/' + str(index) + '.jpg', frame)
index += 1
c += 1
cv2.waitKey(1)
# 按键停止
if cv2.waitKey(1) == ord('q'):
break
cap.release()
Video_Dir = "D:\数据集\data3_16\WIN_20210316_17_46_54_Pro.mp4"
video2images(Video_Dir)
二、图像合成视频
下面展示了,将连续的图片合成一条视频,视频的帧率为24。Python代码如下:
import glob
import os
import cv2
def images2video(image_dir, save_name):
fps = 24
fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
video_w = cv2.VideoWriter(save_name, fourcc, fps, (1920, 1080))
# 扫描文件夹中所有jpg文件
images = glob.glob(os.path.join(image_dir, "*.jpg"))
for i in range(1, len(images)):
# 选中名为"{}.jpg".format(1) = 1.jpg
image_name = os.path.join(image_dir, "{}.jpg".format(i))
frame = cv2.imread(image_name)
video_w.write(frame)
video_w.release()
image_dir = "D:\Project\VideoToImage\pictures"
save_name = "test.avi"
images2video(image_dir, save_name)
由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!
推荐文章