Python OpenCV+中的图像到视频序列;阅读范围

Python OpenCV+中的图像到视频序列;阅读范围,python,image,opencv,video,Python,Image,Opencv,Video,已经和这个问题斗争了一整天,也许有人能帮上忙吗?具备Mathlab、python和openCV的基本知识 我正在使用python从图像制作视频。和往常一样,我发现了一个问题。在读取图像以编写视频时没有顺序。例如,我有img_01,img_02,…img_n。每个img-视频帧。在最后一段视频中,它看起来像: //img_155.jpg //img_476.jpg //img_282.jpg 等等 所以,在最后一段视频中完全是混乱的,结果。。。 请问,有人能帮忙解决这个问题吗?我发现了很多线索,但

已经和这个问题斗争了一整天,也许有人能帮上忙吗?具备Mathlab、python和openCV的基本知识 我正在使用python从图像制作视频。和往常一样,我发现了一个问题。在读取图像以编写视频时没有顺序。例如,我有img_01,img_02,…img_n。每个img-视频帧。在最后一段视频中,它看起来像:

//img_155.jpg //img_476.jpg //img_282.jpg 等等

所以,在最后一段视频中完全是混乱的,结果。。。 请问,有人能帮忙解决这个问题吗?我发现了很多线索,但是它们都只有C++。下面是我现在使用的代码:

import cv2
import argparse
import os

# Construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-ext", "--extension", required=False, default='jpg', help="extension name. default is 'png'.")
ap.add_argument("-o", "--output", required=False, default='output.mp4', help="output video file")
args = vars(ap.parse_args())

# Arguments
dir_path = '.'
ext = args['extension']
output = args['output']

images = []
for f in os.listdir(dir_path):
    if f.endswith(ext):
        images.append(f)

# Determine the width and height from the first image
image_path = os.path.join(dir_path, images[0])
frame = cv2.imread(image_path)
cv2.imshow('video',frame)
height, width, channels = frame.shape

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # Be sure to use lower case
out = cv2.VideoWriter(output, fourcc, 30.0, (width, height))

for image in images:

    image_path = os.path.join(dir_path, image)
    frame = cv2.imread(image_path)

    out.write(frame) # Write out frame to video

    cv2.imshow('video',frame)
    if (cv2.waitKey(1) & 0xFF) == ord('q'): # Hit `q` to exit
        break

# Release everything if job is finished
out.release()
cv2.destroyAllWindows()

print("The output video is {}".format(output))

我认为您的问题是:对于os.listdir(dir_path)中的f:以随机顺序返回文件名

您应该在“#确定第一幅图像的宽度和高度”之前添加跟随线

def name2num(name):
   m = re.search('img_(\d+)\.?.*', name)
   return int(m.group(1),10)

images.sort(key=name2num)

哦,太好了,成功了!但现在有另一个问题,订单进展顺利,但是:img_188…….img_189…….img_19。看起来好像19岁不应该在这里,哈哈。解决这个问题的方法是什么?通过重命名文件来解决这个问题,img之王如果你觉得我的答案对你有帮助,你介意帮我投票吗?当然,伙计!我试着投了很多次票,但因为我的票数少,所以我不能投