使用os.path

时间:2017-01-08 15:35:47

标签: python filepath os.path cv2

我编写了一个脚本,使用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/这样的位置。我不确定这里出了什么问题 - 感谢任何帮助!

1 个答案:

答案 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