【发布时间】:2018-01-04 11:46:42
【问题描述】:
我想阅读视频列表中的任何一项。视频读取和显示代码如下。这段代码运行良好。
import cv2
def VideoReading(vid):
cap = cv2.VideoCapture(vid)
while True:
ret, frame = cap.read()
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
由于我有大量视频,并且我通过命令行调用代码,因此编写整个视频名称很麻烦。所以我创建了一个字典。这里给出2的例子:
{"Video1.mp4": 1, 'Video2.mp4': 2}
现在我使用以下代码调用视频,使用值 1 或 2,而不是视频名称。代码如下:
def Main():
VideoFiles= ["Video1.mp4", "Video2.mp4"]
VideoFilesIndicator = [1, 2]
model_list = {}
for i in range(len(VideoFiles)):
model_list[VideoFiles[i]] = VideoFilesIndicator[i]
print(model_list)
def convertvalues(value):
return model_list.get(value, value)
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--video", help = "add video file name of any format", type = convertvalues,\
choices = [1,2], default = 1)
args =parser.parse_args()
return VideoReading(args.video)
if __name__ == "__main__":
Main()
现在当我在 cmd "python VideoReading.py -v 2" 中运行代码时,它会抛出以下错误。
错误:参数 -v/--video:无效选择:'2'(从 1、2 中选择)
我不明白为什么会出现此错误。我正在关注this 的帖子来构建我的程序。
【问题讨论】:
-
VideoReading(args.video)中抛出错误?如果是这样,您可以尝试对其进行调整以返回 VideoReading(int(args.video)) 吗?
-
@Uvar:我已经试过了。但仍然遇到同样的问题。
-
model_list = dict(zip(VideoFilesIndicator, VideoFiles));请注意您的字典目前是倒退的;您想将数字映射到文件名,反之亦然。 -
强制程序用户知道文件的内部编号是糟糕的界面设计。
-
@chepner:感谢您的建议。我知道,但我的经理建议我这样做!
标签: python dictionary argparse