Почему мой код для обрезки нескольких изображений с использованием OpenCV и сохранения их в папку не работает? - PullRequest
0 голосов
/ 24 марта 2020

Я готовлю набор данных для обнаружения объектов, поэтому я хочу обрезать тысячи изображений, и ниже указан мой код:

for i in os.listdir('diri'):
   if not (i.endswith('.png') or i.endswith('.jpg')):
      continue
   img= cv2.imread(i)
   crop= img[240:400,0:480]
   cv2.imwrite('Cropped/{0}'.format(i),crop)

Это дает следующее сообщение об ошибке:

TypeError                                 Traceback (most recent call last)
<ipython-input-13-a53199d54e32> in <module>
  4         continue
  5     img= cv2.imread(i)
----> 6     crop= img[240:400,0:480]
  7     cv2.imwrite('Cropped/{0}'.format(i),crop)

TypeError: 'NoneType' object is not subscriptable

Но когда я беру то же изображение и выполняю операцию из l oop, она работает, поэтому я не знаю, как изображение возвращается как None.

Я также попробовал другой метод, как показано ниже :

import glob
images = [cv2.imread(file) for file in glob.glob("./diri/*.jpg")]
for i in images:
   crop= i[240:400,0:480]
   cv2.imwrite('Cropped/{0}.jpg'.format(i),crop)

Вышеописанное выполняется без ошибок, но в папке o / p нет обрезанных изображений.

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 24 марта 2020

Вы передаете только имя изображения на cv2.imread(i). Поскольку изображения размещены внутри папки "diri". Поэтому вы получаете ошибку NoneType.

Измените код на:

imgpath = os.path.join("diri", i)

cv2.imread(imgpath)

Для второго метода выполните убедитесь, что у вас есть каталог Cropped параллельно с diri.

...