python opencv 将不同shape尺寸的图片制作video视频。
具体代码实现如下:
python
import os
import cv2
import time
import shutil
def resize_img_keep_ratio(img, target_size):
old_size = img.shape[:2] # 原始图像大小
ratio = min(target_size[i] / old_size[i] for i in range(len(old_size))) # 计算比例
new_size = tuple(int(i * ratio) for i in old_size) # 计算新的图像大小
img = cv2.resize(img, (new_size[1], new_size[0])) # 调整图像大小
pad_w = target_size[1] - new_size[1] # 计算宽度填充
pad_h = target_size[0] - new_size[0] # 计算高度填充
top, bottom = pad_h // 2, pad_h - (pad_h // 2)
left, right = pad_w // 2, pad_w - (pad_w // 2)
img_new = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=(255,255,255)) # 边缘填充
return img_new
if __name__ == "__main__":
path_root = "D:/dataset/img_list/lichee/"
text_prompt = "lichee"
path_s = "datas/{}/".format("lichee")
if not os.path.exists(path_s): # 如果文件夹不存在
os.mkdir(path_s) # 生成文件夹
loc_time = time.localtime()
str_time = time.strftime("%Y-%m-%d-%H-%M-%S", loc_time)
save_name = "{}_{}".format(text_prompt,str_time)
video_writer = None
s_idx = 0
for f_ in os.listdir(path_root):
image_path = path_root + f_
img_ = cv2.imread(image_path)
img_cv = resize_img_keep_ratio(img_, [720,720])
cv2.namedWindow("img",0)
cv2.imshow("img",img_cv)
key_id = cv2.waitKey(0)
if key_id == 27:
break
if key_id == ord("a"):
# box_xml
s_idx += 1
print("----------------------------->> s_idx:",s_idx)
ss_name = "{:05d}.jpg".format(s_idx)
shutil.copyfile(image_path,path_s + str_time+"_"+ss_name)
if video_writer is None:
video_writer = cv2.VideoWriter("./demo/{}.mp4".format(save_name), cv2.VideoWriter_fourcc(*"mp4v"), fps=1, frameSize=(img_cv.shape[1],img_cv.shape[0]))
video_writer.write(img_cv)
os.remove(image_path)
video_writer.release()
