python cv2.imread не возвращает ничего на 6-м изображении

Я пытаюсь импортировать и читать все изображения в папке. Однако, когда у меня более 5 изображений, cv2.imread не возвращает ничего для 6-го изображения. Я пробовал использовать разные имена файлов, разные файлы и т. д., но не могу заставить его работать.

import cv2
import numpy as np
import matplotlib.pyplot as plt
from tkinter import filedialog
import os
from mpl_toolkits.mplot3d import Axes3D

global scan_dir
scan_dir = filedialog.askdirectory()
print(scan_dir)
x=os.listdir(scan_dir)

img={}

print(x)

for i in range(0,len(x)):

    print(i)

    img[i] = cv2.imread(x[i], cv2.IMREAD_GRAYSCALE)

    indices[i] = np.where(img[i]<100)

Я получаю следующую ошибку... (None - это возврат print(img[i] на 6-й итерации цикла)

None
Traceback (most recent call last):
File "C:\CodeRepository\US-3D\GettingCloser.py", line 55, in <module>
      indices[i] = np.where(img[i]<100)
TypeError: '<' not supported between instances of 'NoneType' and 'int'

У меня такая же проблема, если я попробую это

global scan_dir
scan_dir = filedialog.askdirectory()
print(scan_dir)
x=os.listdir(scan_dir)

img = cv2.imread(x[5], cv2.IMREAD_GRAYSCALE)

Он вернет, что img равно None. Это верно для всего, кроме 5-го изображения.


person tbonts    schedule 04.12.2018    source источник
comment
Что вы получаете за print(x)?   -  person HSK    schedule 04.12.2018
comment
Вы имеете в виду, что '5.tif' дает значение None? Если это так, попробуйте прочитать это отдельно или удалить этот файл из `list. Мы должны прийти к выводу, есть ли проблема в коде или изображении. Затем мы движемся к ее решению.   -  person Hayat    schedule 04.12.2018
comment
Я попытался удалить это изображение, а также изменить его цвет, чтобы он имел другую окраску. Теперь я просто попытался изменить имена файлов на 01.tif, 02.tif, 03.tif, 04.tif< /i>, 05.tif. Я также попытался изменить 5.tif на 6.tif. Оба они вернули None. Кажется, что все, кроме 1, 2, 3, 4, 5, поскольку имя файла возвращает None   -  person tbonts    schedule 04.12.2018


Ответы (1)


Должно быть что-то не так с файлом. dicts - это неупорядоченная структура данных. Не должен всегда выдавать ошибку на 5th итерации. Однако я внес изменения, которые не будут вызывать ошибку. Но вам нужно отладить этот образ

for i in range(0,len(x)):

    print(i)

    img[i] = cv2.imread(x[i], cv2.IMREAD_GRAYSCALE)
    if img[i]:

        indices[i] = np.where(img[i]<100)
person Hayat    schedule 04.12.2018
comment
Я пробовал это, и он вернул if img[i]: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() - person tbonts; 04.12.2018
comment
Эта ссылка может помочь. stackoverflow.com/questions/10062954/ - person Hayat; 04.12.2018
comment
Я отредактировал вопрос. Я не думаю, что задал правильный вопрос. Кажется, проблема возникла раньше, чем cv2.imread...? - person tbonts; 04.12.2018