Масштабирование и сохранение изображений (AttributeError: объект 'NoneType' не имеет атрибута 'shape')

1

Я пытаюсь масштабировать и сохранять тысячи изображений в каталоге.

Мне удалось изменить размеры изображений. Однако при сохранении ошибок возникают ошибки.

Код ниже. Помогите мне.

import cv2
import numpy as np
import os

def scaling_shirink(addr):
    img = cv2.imread(addr)
    height, width = img.shape[:2]
    shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    cv2.imshow('Shrink', shrink)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

count = 0
IMAGE_DIR_BASE = 'C:/ClassShared\Data/CM_ML_IMG_181011/CASE_01/FPS_10_PNG'
image_file_list = os.listdir(IMAGE_DIR_BASE)
for file_name in image_file_list:
    image = scaling_shirink(IMAGE_DIR_BASE + '/' + file_name)
    cv2.imwrite('C:/ClassShared\Data/CM_ML_IMG_181011/CASE_01/34_sdetect_db1/' + '_' + "%04d" % (count) + '.png', image)
    count = count + 1

Сообщения об ошибках следующие.

Traceback (most recent call last):
  File "C:/PycharmProjects/TS_S/Scailing.py", line 19, in <module>
    image = scaling_shirink(IMAGE_DIR_BASE + '/' + file_name)
  File "C:/PycharmProjects/TS_S/Scailing.py", line 8, in scaling_shirink
    height, width = img.shape[:2]
AttributeError: 'NoneType' object has no attribute 'shape'

Я не понимаю, почему он говорит AttributeError: объект "NoneType" не имеет атрибута "shape"

  • 0
    cv2.imread(addr) вернул None . Вы уверены, что addr правильный? Есть ли в этом каталоге файлы, не относящиеся к изображениям?
  • 0
    конечно, это правильно, и если я бегу без заявления, то он работает хорошо.
Показать ещё 3 комментария
Теги:
opencv
image-processing
scale
attributeerror

1 ответ

0

РЕДАКТИРОВАТЬ:

Проверьте правильность пути изображения и, если это на самом деле изображение с форматами, принятыми Opencv. Поскольку, если ваш путь неправильный, img = cv2.imread(addr) вернет None и height, width = img.shape[:2] выдаст ошибку

Кроме того, ваша функция scaling_shirink() возвращает None. Чтобы исправить это, просто измените его на приведенную ниже функцию:

def scaling_shirink(addr):
    img = cv2.imread(addr)
    height, width = img.shape[:2]
    shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    cv2.imshow('Shrink', shrink)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #this return was missing
    return shrink 

Это должно сработать!

  • 1
    Это не проблема, которая вызывает ошибку (хотя это еще одна проблема для OP); img.shape ошибку до того, как оператор return может произойти, потому что imread() возвращает None .
  • 1
    @AlexanderReynolds вы правы! Хотя отсутствие возврата в функцию также является проблемой. Спасибо за чаевые

Ещё вопросы

Сообщество Overcoder
Наверх
Меню