Появилась проблема с ошибкой: 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 шт):
Ошибка "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
Это последнее что я могу вам еще раз сказать.
Если вы хотите получать быстрые и правильные ответы, вы должны предоставить минимально-воспроизводимый пример, который демонстрирует проблему.
Об этом я вам написал сразу в первом комментарии.
Вместо того чтобы разместить минимально-воспроизводимый пример, вы начинаете рассказывать кому что писать и то что вы что-то пробовали и что у вас что-то не получается.
Я внес некоторые правки чтобы запустить ваш пример без ошибок и вот что получилось:
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

