FileNotFoundError: [Errno 2] нет такого файла или каталога: 'frame0.png ' но на самом деле имеет



У меня есть аналогичная проблема со многими постами о проблеме пути, но я не могу найти никакого решения, чтобы исправить мою проблему



Итак, во-первых, у меня есть функция, в которой я создаю каталог, в котором будут храниться все извлеченные кадры из видео



def extract_frame(video,folder):

os.mkdir(folder)
vidcap = cv2.VideoCapture(video)
success,image = vidcap.read()
fps = vidcap.get(cv2.CAP_PROP_FPS)
count = 0
success = True
while success: #os.path.join(pathOut,(name+'.png'))
cv2.imwrite(os.path.join(folder,"frame%d.png" % count), image)
success,image = vidcap.read()
print('Read a new frame: ', success)
count += 1


Которые работают довольно хорошо, и я хочу, чтобы весь кадр был обработан, поэтому я написал



def rm_green(pathOut):   

for f in os.listdir(pathOut):
if f[-3:] == "png":
name, ext = os.path.splitext(f)
im = Image.open(f)
im = im.convert('RGBA')
.
.
. ## and some other line of code blah blah


Затем я, наконец, вызываю функцию:



extract_frame('vid.mp4', 'test1')
pathIn='./test1/'
rm_green(pathIn)


Отсюда хорошо работает функция extract_frame (), которая создает папку с именем 'test1' и там есть в нем все кадры. Но есть ошибка



File "C:UsersDELLAnaconda3libsite-packagesspyderutilssitesitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File "C:UsersDELLAnaconda3libsite-packagesspyderutilssitesitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/DELL/Desktop/Senior/video/bg/use this/extract-remove-green-combinevid.py", line 113, in <module>
rm_green(pathIn)

File "C:/Users/DELL/Desktop/Senior/video/bg/use this/extract-remove-green-combinevid.py", line 61, in rm_green
im = Image.open(f)

FileNotFoundError: [Errno 2] No such file or directory: 'frame0.png'


Что я не знаю, почему это происходит, так как есть кадры в папке test1. Есть ли что-то неправильное в том, как я написал путь? Как это может произойти, если он читает ' frame 0.png ' которые находятся в папке test1? Или эта ошибка связана с изображением.открыть(f)из библиотеки PIL?



Спасибо



Править:
ос.listdir()
Код из файла py с именем extract-remove-green.. > > Это ОС.listdir() работает правильно?

706   2  

2 ответов:

Я вижу, что вы пытаетесь использовать f непосредственно из переменной цикла. Но это будет просто имя файла, а не путь к файлу. Возможно, вам придется сделать os.abspath(f), чтобы получить полный путь к файлу, а затем выполнить над ним необходимую операцию.

for f in os.listdir(pathOut):
    file_path = os.path.abspath(os.path.join(pathOut, f))
    if f[-3:] == "png":         
        name, ext = os.path.splitext(f)
        im = Image.open(file_path)
        im = im.convert('RGBA')

Надеюсь, это поможет вам. Спасибо.

Вот совет, как получить полный путь к adirectory файла:

import path
script_dir = path.dirname(path.abspath(__file__))

Затем вы можете использовать join или concatination для получения полного пути к вашему файлу или подкаталогу:

file_path = script_dir.join("\\the_name_of_file_or_directory") 
# file_path  = script_dir + "\\the_name_of_file_or_directory"

Comments

    Ничего не найдено.