Появилась проблема с ошибкой: AttributeError: 'NoneType' object has no attribute 'shape' Хотя библиотеку я подключил. Полный путь указал?

полная ошибка AttributeError Traceback (most recent call last)
Cell In[14], line 7
    
         6 img = cv2.imread('C:/Users/Sergo/Desktop/Новая 
     
   папка/PycharmProjects/pythonProject1/image_1024_aligned_rgb.png')
  ----> 7 height, width, _ = img.shape
        9 ceiling = img[0:height//8, 0:width]
        10 floor = img[7*height//8:height, 0:width]

[Non-Project Files] в изображении В чем может быть проблема?

        import cv2
        import numpy as np
        from matplotlib import pyplot as plt
        %matplotlib inline
        
# Загрузка панорамного снимка и разделение на 8 частей
        img = cv2.imread('C:/Users/Sergo/Desktop/Новая
    папка/PycharmProjects/pythonProject1/image_1024_aligned_rgb.png')  
        
        height, width, _ = img.shape
        # Check if the image has loaded correctly
        ceiling = img[0:height//8, 0:width]
        floor = img[7*height//8:height, 0:width]
        walls = [img[i*height//8:(i+1)*height//8, 0:width] for i in range(1, 7)]
      
        
# Создание 8 перспективных 2D-проекций
        ceiling_proj = cv2.resize(ceiling, (int(width * scale_factor), int(height * scale_factor)))
        floor_proj = cv2.resize(floor, (int(width * scale_factor), int(height * scale_factor)))
        wall_proj = [cv2.resize(wall, (int(width * scale_factor), int(height * scale_factor))) for wall in walls]
        
        # Сохранение проекций в отдельные файлы изображений
        cv2.imwrite('ceil_proj.jpg', ceiling_proj)
        cv2.imwrite('floor_proj.jpg', floor_proj)
        for i, wall_proj in enumerate(wall_projs):
            cv2.imwrite(str(i) + '_proj.jpg', wall_proj)
        

Ответы (2 шт):

Автор решения: Vladyslav

Ошибка "AttributeError: 'NoneType' object has no attribute 'shape'" обычно возникает, когда попытка получить атрибут shape у объекта, который является None. В вашем случае причина этой ошибки скорее всего связана с тем, что изображение, которое Вы пытаетесь загрузить с помощью cv2.imread, не удалось корректно выгрузить , что приводит к возвращению значения None, а не объекта изображения.

Можно попробовать добавить проверку загруженного изображения на None, чтобы обработать случай, когда загрузка не прошла успешно.

img = cv2.imread('C:/Users/Sergo/Desktop/Новая папка/PycharmProjects/pythonProject1/image_1024_aligned_rgb.png')

if img is None:
    print("Не удалось загрузить изображение")
else:
    height, width, _ = img.shape
→ Ссылка
Автор решения: S. Nick

Это последнее что я могу вам еще раз сказать.
Если вы хотите получать быстрые и правильные ответы, вы должны предоставить минимально-воспроизводимый пример, который демонстрирует проблему.
Об этом я вам написал сразу в первом комментарии.

Вместо того чтобы разместить минимально-воспроизводимый пример, вы начинаете рассказывать кому что писать и то что вы что-то пробовали и что у вас что-то не получается.

Я внес некоторые правки чтобы запустить ваш пример без ошибок и вот что получилось:

import cv2
import numpy as np
from matplotlib import pyplot as plt
#%matplotlib inline
        
# Загрузка панорамного снимка и разделение на 8 частей
# 
img = cv2.imread('image_1024_aligned_rgb.png')  
        
height, width, _ = img.shape
# Check if the image has loaded correctly
ceiling = img[0:height//8, 0:width]
floor = img[7*height//8:height, 0:width]
walls = [img[i*height//8:(i+1)*height//8, 0:width] for i in range(1, 7)]
        
# Рассчитаем коэффициент масштабирования для всех проекций
scale_factor = 250 / height 
        
# Создание 8 перспективных 2D-проекций
ceiling_proj = cv2.resize(ceiling, (int(width * scale_factor), int(height * scale_factor)))
floor_proj = cv2.resize(floor, (int(width * scale_factor), int(height * scale_factor)))


#vvvvvvvvv <---- ???
#wall_proj = [cv2.resize(wall, (int(width * scale_factor), int(height * scale_factor))) for wall in walls]
# +++
wall_projs = [cv2.resize(wall, (int(width * scale_factor), int(height * scale_factor))) for wall in walls]

# Сохранение проекций в отдельные файлы изображений
cv2.imwrite('ceil_proj.jpg', ceiling_proj)
cv2.imwrite('floor_proj.jpg', floor_proj)

for i, wall_proj in enumerate(wall_projs):
    cv2.imwrite(str(i) + '_proj.jpg', wall_proj)

# Отображение проекций с использованием Matplotlib (опционально)
plt.figure(figsize=(10, 5))
plt.subplot(2, 4, 1), plt.imshow(cv2.cvtColor(ceiling_proj, cv2.COLOR_BGR2RGB)), plt.title('Ceiling Projection')
plt.subplot(2, 4, 2), plt.imshow(cv2.cvtColor(floor_proj, cv2.COLOR_BGR2RGB)), plt.title('Floor Projection')

for i, wall_proj in enumerate(wall_projs):
    plt.subplot(2, 4, i+3), plt.imshow(cv2.cvtColor(wall_proj, cv2.COLOR_BGR2RGB)), plt.title('Wall ' + str(i) + ' Projection')

plt.show()

введите сюда описание изображения

image_1024_aligned_rgb.png

введите сюда описание изображения

→ Ссылка