制作视频图像数据集

对视频数据集制作分成以下几个步骤:

1. 找到相对应的视频

2. 将视频剪辑成相应的片段

3. 通过代码对视频取帧

# -*- coding: utf-8 -*-
#这句注释是为了能够识别中文注释
import cv2
vc = cv2.VideoCapture('D:\\DATASET\\Emily.avi')
#cv只能识别avi格式的视频,因此拿到其他格式的视频首先要对格式进行转变。
c=1

if vc.isOpened():
	rval, frame = vc.read()
else:
	rval = False

timeF = 100
# 这代表隔多久取一次帧
while rval:
	rval, frame = vc.read()
	if(c%timeF==0):
        # 将帧写入文件夹
		cv2.imwrite('D:\\DATASET\\gan_picture\\emily\\step1\\'+str(c)+'.jpg',frame)
	c= c+1
	cv2.waitKey(1)
vc.release()

4. 对每一帧的视频去黑边

# -*- coding: utf-8 -*-
'''
去黑边的操作其实很好理解,因为电影中往往有上下黑边,从实际来讲就是,我们只要找到黑边的位置,然后进行剪切就可以了。关键在于确定黑边的位置。在我这里是通过手动尝试的。几个像素,通过微信截图可以大致确定。
'''

import cv2
import os
import datetime
import matplotlib.pyplot as plt

def change_size(read_file):
    #通过cv读取图片
    image=cv2.imread(read_file,1) 
    #知道图像的高度
    height=image.shape[0]
    #cv是从上到下。从左往右显示图片。
    pre1_picture=image[8:height-8,:]        

    return pre1_picture                                            

source_path="D:\\DATASET\\train for cyclegan\\testB\\"                                    
save_path="D:\\DATASET\\train for cyclegan\\testB\\"                                     

if not os.path.exists(save_path):
    os.mkdir(save_path)
# 列出所有的图像文件
file_names=os.listdir(source_path)

starttime=datetime.datetime.now()
for i in range(len(file_names)):
    #对每一个图像文件执行crop操作。
    x=change_size(source_path + file_names[i])
    #将剪切过的图像重新写入。       
    cv2.imwrite(save_path+file_names[i],x)
    print(file_names[i])
    print(i)

5. 对图像进行重命名

# -*- coding: utf-8 -*-
#记住这个命令,在每一个代码之前加入这个
import os

def rename(path):
    filelist = os.listdir(path)
    #对文件夹中给的文件按照序列进行排序。因为图片是有顺序的
    files.sort(key=lambda x: int(x.split('.')[0]))
    for file in filelist:    #os.listdir('.')遍历文件夹内的每个文件名,并返回一个包含文件名的list
        if file[-2: ] == 'py':
            continue   #过滤掉改名的.py文件
        name = file.replace('testA', '')   #去掉空格
        os.rename(os.path.join(path,file),
                  os.path.join(path,name))

rename(r'D:\DATASET\train for cyclegan\cropped\\')

6. 对所有图像进行缩放

# -*- coding:uft-8 -*-
import cv2
import os
import os

def cutimage(dir):
    files = os.listdir(dir)
    files.sort(key=lambda x: int(x.split('.')[0]))
    i = 0
    for path in files:
        full_path = os.path.join(dir, path)
        # print(full_path)
        image = cv2.imread(full_path)  # opencv剪切图片,得到三维矩阵数据

        # 缩放至定尺寸w*h
        dim = (256, 256)
        resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
        #这里采用的插值法是INTER_LINEAR
        i+=1
        cv2.imwrite("D:/DATASET/train for cyclegan/trainB/{}.jpg".format(str(i)), resized)
    #保存文件


    cv2.waitKey(0)  # 退出


dir = 'D:/DATASET/train for cyclegan/cropB'
cutimage(dir)

vc.release()

基本上按照上面的几步就能得到想要的数据集了。再整理一下,就可以进行训练了。

2022.10.24更新:

感谢各位通过搜索看到我的这篇文章,这篇文章是我研二开学,也就是19年的时候写的。

现在我已经研究生毕业,工作一年了。 现在依旧每天有很多人通过这篇文章关注到我,说明视频方向依旧火热。 

跟各位汇报一下,我研究生期间发表了两篇视频相关的论文,一篇ICME,一篇ICIP。

ICME 如下:

Yaxin Liu, Xiaoyan Zhang*, Xiaogang Xu, “Semantic-Aware Video Style Transfer Based On Temporal Consistent Sparse Patch Constraint”, IEEE International Conference on Multimedia and Expo (ICME), 2021, oral, accepted.

ICIP 链接如下: 

Y. Liu, X. Zhang and X. Xu, "Reference-Based Video Colorization With Multi-Scale Semantic Fusion And Temporal Augmentation," 2021 IEEE International Conference on Image Processing (ICIP), 2021, pp. 1924-1928, doi: 10.1109/ICIP42928.2021.9506422.

但目前在京东从事前端工作。 如果小伙伴们有算法、前端相关问题,欢迎来问我。同时,工作这一年我也有很多择业、职业规划上的体会,欢迎小伙伴们来一起探讨。

我的微信: jks129434193。

你可能感兴趣的:(科研记录,1024程序员节)