制作数据集时关于python处理图片的操作

一、跟据.txt文件的图片路径保存到另一个文件夹“./data/test/”

.txt文件如下图所示

制作数据集时关于python处理图片的操作_第1张图片

代码

import os
import cv2

fopen=open('test.txt','r')
lines=fopen.readlines()

test=[]
for line in lines:
    line = line.strip('\n') #去掉换行符
    test.append(line)
save_path = './data/test/'
for pic in test:
    img=cv2.imread(pic)
    # os.path.basename()获取图片名称
    cv2.imwrite(save_path + os.path.basename(pic),img)
print('save pictures finished!')

二、将视频按帧输出为图片并保存

import cv2
import os

VIDEO_PATH = './smoking_1.mp4' # 视频地址
EXTRACT_FOLDER = './data1/' # 存放帧图片的位置
EXTRACT_FREQUENCY = 2# 帧提取频率


def extract_frames(video_path, dst_folder, index):
    # 主操作
    video = cv2.VideoCapture()
    if not video.open(video_path):
        print("can not open the video")
        exit(1)
    count = 1
    while True:
        _, frame = video.read()
        if frame is None:
            break
        if count % EXTRACT_FREQUENCY == 0:
            save_path = "{}/{:>04d}.jpg".format(dst_folder, index)
            cv2.imwrite(save_path, frame)
            index += 1
        count += 1
    video.release()
    # 打印出所提取帧的总数
    print("Totally save {:d} pics".format(index-1))


def main():
    # 递归删除之前存放帧图片的文件夹,并新建一个
    import shutil
    try:
        shutil.rmtree(EXTRACT_FOLDER)
    except OSError:
        pass
    os.mkdir(EXTRACT_FOLDER)
    # 抽取帧图片,并保存到指定路径
    extract_frames(VIDEO_PATH, EXTRACT_FOLDER, 1)


if __name__ == '__main__':
    main()

三、批量更改图片(文件)名称

只修改一类文件

import os

image_path = './data/test/'
# 获取该目录下所有文件,存入列表中
f = os.listdir(image_path)
n = 0
m=1
for i in f:
    # 设置旧文件名(就是路径+文件名)
    file_name = i.split('.')[0]#只读取图片的前缀名称,不读取后缀格式
    print(file_name)
    oldname = image_path + f[n]

    # 设置新文件名
    #newname = path + str(n) + '.png'
    newname = image_path + str(m).zfill(4)+'_test.jpg'

    # 用os模块中的rename方法对文件改名
    os.rename(oldname, newname)
    print(oldname, '======>', newname)

    n += 1
    m+=1

但有时候需要目标检测图片和标签对应修改成相同的文件名,做以下修改即可,具体见以下代码:

import os

image_path = './pic/images/' #图片路径
label_path = './pic/Annotations/' #标签路径
# 获取该目录下所有文件,存入列表中
f = os.listdir(label_path)
m=1
for i in f:
    # 设置旧文件名(就是路径+文件名)
    image_oldname = image_path + file_name + '.jpg'
    label_oldname = label_path + file_name + '.xml'
    #oldname = image_path + f[n]
    print('image_oldname:',image_oldname)
    print('**********************')
    print('label_oldname:',label_oldname)

    # 设置新文件名
    #newname = path + str(n) + '.png'
    #zfill()是指文件名的位数
    image_newname = image_path + str(m).zfill(4)+'_IN.jpg'
    label_newname = label_path + str(m).zfill(4)+'_IN.xml'

    # 用os模块中的rename方法对文件改名
    os.rename(image_oldname, image_newname)
    os.rename(label_oldname, label_newname)
    print(image_newname, '======>', image_newname)
    print('===================================================================================')
    print(label_newname, '======>', label_newname)
    m+=1

四、文件的读取和删除

1、文本文件

(1)创建一个文本文件并在其中写入数据

file = open('file_path')
file.write('写入的数据')

(2)将文本文件复制到另一个文件夹

import shutil

shutil.copyfile(old_path, new_path)

2、图片文件

读取图片并将其保存至另一个文件夹

import cv2

img = cv2.imread(file_name)
cv2.imwrite(new_path, img)

3、通用:删除文件

import os

os.remove(file_name)

你可能感兴趣的:(深度学习,python)