我编写了一个脚本,使用cv2和其他一些模块将视频文件分割成帧。到目前为止,我很高兴粘贴文件路径并运行代码,但现在我希望用户输入文件路径和名称以响应提示。这应该很简单,但是我在为os.path工作方面遇到了很多麻烦。主要问题是我希望每个图像文件(即框架)的名称中都有一个数字,表示它在序列中的位置。以下代码就是我所拥有的:
filepath = input('Please enter the filepath for the clip: ')
clip = cv2.VideoCapture(filepath)
#### This code splits the clip into scenes
filepath1 = input('Please enter the filepath for where the frames should be saved: ')
name = input('Please enter the name of the clip: ')
ret, frame = clip.read()
count = 0
ret == True
while ret:
ret, frame = clip.read()
cv2.imwrite((os.path.join(filepath1,name, '(%d)','.png') % count, frame))
count += 1
但是,会产生以下错误:
cv2.imwrite((os.path.join(filepath1,name, '(%d)','.png') % count, frame))
TypeError: Required argument 'img' (pos 2) not found
在os.path.join命令的括号中包含% count, frame
变量会产生不同的错误:
TypeError: not all arguments converted during string formatting
它应该做的是将一些名为name(x)
的.png文件写入MYcomputer/mydesktop/myfolder/
这样的位置。我不确定这里出了什么问题 - 感谢任何帮助!
答案 0 :(得分:2)
您的括号展示位置以及((member(L1,C)-> print('first'));
(member(L2,C)-> print('second'));
(member(L3,C)-> print('third'));
(member(L4,C)-> print('fourth')));
(print('else'))
的使用情况是错误的
join
应该更正:
cv2.imwrite((os.path.join(filepath1,name, '(%d)','.png') % count, frame))
为了进一步改进代码,我建议
cv2.imwrite(os.path.join(filepath1, name+'(%d).png'%count), frame)
这里是fname = "{name}({count}).png".format(name=name, count=count)
cv2.imwrite(os.path.join(filepath1, fname), frame)
的简要说明:它将所有参数与操作系统的路径分隔符连接起来(基于Unix的“/”和Windows上的“\”)。结果,您的原始代码将产生以下字符串:
os.path.join