Чтение файлов из списка путей - PullRequest
0 голосов
/ 26 октября 2019

Я скачал набор данных для проекта глубокого обучения, который содержит изображения (.png) и соответствующую метку для каждого изображения (.txt). У меня есть все пути к изображениям в списке x. Я хочу перебрать эти пути, предварительно обработать изображения, используя cv2, и добавить новые изображения в новый список images_data. Тем не менее, каждый раз, когда я пытаюсь выполнить цикл, я получаю эту ошибку: cv2.error: OpenCV(4.1.1) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

Даже когда я закомментирую строку кода, которая выдает ошибку, я получаю еще одну ошибку при попытке изменить размерimage.

Это цикл for, который я использую для перебора списка:

images_data = []
    for file in x:
        img = cv2.imread(file)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        img = cv2.resize(img, (80, 80))
        images_data.append(img)

Мой список x выглядит примерно так: x = [car1.png, car2.png, car3.png, car4.png, car5.png]

Как я могу решить эту ошибку?

1 Ответ

1 голос
/ 27 октября 2019

Эта ошибка означает, что ваша переменная img пуста, поэтому cv2.imread(file) не прочитал изображение. Вы можете проверить это после прочтения изображения и перед преобразованием цвета или изменением размера, с помощью простого регистра if:

if img is None: 
    print('Error reading image')
else:
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

или проверьте, существует ли файл с использованием модуля os:

img = cv2.imread(file)
if os.path.isfile(file): 
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

os.path.isfile (file) вернет True, если файл существует.

Я предполагаю, что ваши файлы, car1.png, car2.png и т. Д. Находятся в другой папке и не находятся на том же пути с этимСценарий, в этом случае вам нужно добавить каталог изображений к имени файла, прежде чем вы сможете прочитать его. Так, например, если ваши изображения находятся, скажем, в '/home/Deep_Learning/Car_Images/', то при чтении изображений переменная file должна содержать строку: /home/Deep_Learning/Car_Images/car1.png для первого изображения, а не просто car1.png. Вы можете сделать это, используя os модуль python:

import cv2
import os

# Directory of the images. Change it according your path
data_dir = '/home/Deep_Learning/Car_Images/' 

images_data = []
for file in x:
    file_name = os.path.join(data_dir, file) # Append the image folder with the image name

    if os.path.isfile(file_name) is False: #Check if image file exists
        print("Image file ", file_name, "does not exist")
    else:
        img = cv2.imread(file_name)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        img = cv2.resize(img, (80, 80))
        images_data.append(img)
...