Объект OpenCV NoneType не имеет формы атрибута

Здравствуйте, я работаю над Raspberry Pi с OpenCV. Я хочу попробовать учебник по отслеживанию мяча по ссылке http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/

Но когда я его компилирую, я получаю сообщение об ошибке: объект «NoneType» не имеет атрибута «форма».

Что я должен делать?


person user3748265    schedule 03.10.2016    source источник
comment
Скорее всего, вы не получаете изображение из своего видео. Скорее всего он пустой. Проверьте путь к файлу видео.   -  person fmw42    schedule 21.02.2020
comment
Проверьте путь к файлу видео. Как мне это сделать?   -  person yishairasowsky    schedule 24.04.2020


Ответы (13)


Это означает, что где-то функция, которая должна возвращать изображение, только что вернула None и, следовательно, не имеет атрибута формы. Попробуйте «распечатать img», чтобы проверить, является ли ваше изображение None или фактическим объектом numpy.

person asc11    schedule 03.10.2016

Сегодня я столкнулся с той же проблемой, пожалуйста, проверьте путь к изображению, указанный cybseccrypt. После imread попробуйте распечатать изображение и посмотрите. Если вы получаете значение, это означает, что файл открыт.

Код:

img_src = cv2.imread('/home/deepak/python-workout/box2.jpg',0) print img_src

Надеюсь это поможет!

person Deepak V    schedule 08.02.2018

Вы, вероятно, получаете ошибку, потому что ваш путь к видео может быть неправильным. Убедитесь, что ваш путь полностью правильный.

person aysebilgegunduz    schedule 22.07.2017

Я также столкнулся с этой проблемой и потратил много времени на ее отладку.

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

Далее вы должны знать, что Opencv не поддерживает пути к изображениям, содержащие символы Юникода (см. ref). Если ваш путь к изображению содержит символы Unicode, вы можете использовать следующий код для чтения изображения:

import numpy as np
import cv2

# img is in BGR format if the underlying image is a color image
img = cv2.imdecode(np.fromfile(im_path, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
person jdhao    schedule 21.02.2020
comment
Большое спасибо, jdhao! - person Khelina Fedorchuk; 02.12.2020

Надеюсь, это поможет любому, кто сталкивается с той же проблемой

Чтобы точно знать, где произошло, так как работающая программа не упоминает об этом как об ошибке с номером строки

'NoneType' object has no attribute 'shape'

Обязательно добавьте assert после загрузки image/frame

Для изображения

image = cv2.imread('myimage.png')
assert not isinstance(image,type(None)), 'image not found'

Для видео

cap = cv2.VideoCapture(0)

    while(cap.isOpened()):

        # Capture frame-by-frame
        ret, frame = cap.read()
        if ret:
            assert not isinstance(frame,type(None)), 'frame not found'

Помогли мне решить аналогичную проблему, в длинном скрипте

person Santhosh Dhaipule Chandrakanth    schedule 22.07.2019

попробуйте обработать ошибку, это ошибка атрибута, заданная OpenCV

try:
    img.shape
    print("checked for shape".format(img.shape))
except AttributeError:
    print("shape not found")
    #code to move to next frame
person Sir Tesla    schedule 12.09.2017

Это происходит из-за неправильного пути к изображению или неправильного имени изображения, которое вы пишете.

как проверить? сначала попробуйте распечатать изображение с помощью print(img), если оно печатает «Нет», это означает, что вы указали неверный путь к изображению, исправьте этот путь и повторите попытку.

person sachinsaini    schedule 29.09.2018

Я просто встречаю ту же проблему. Я решаю это, обновляя новейшую версию OpenCV. Это хорошо работает со мной. Надеюсь, у вас тоже все в порядке.

person Son Tran Hoang    schedule 01.10.2018
comment
(Похоже, что этот пост не дает качественного ответа на вопрос. Пожалуйста, отредактируйте свой ответ и улучшите его, или просто опубликуйте его как комментарий к вопросу.) - person sɐunıɔןɐqɐp; 01.10.2018

Я работаю с искусственно созданными изображениями, т.е. Я создаю их сам, а затем обучаю на них нейросеть для выполнения определенной задачи. Итак, я создал эти образы, сохранил их, но когда я попытался их открыть (с помощью cv2.imread(...)), я получил эту ошибку. Оказалось, что при искусственном сохранении создали образы, которые нужно добавить dtype=np.uint8. Это решило проблему для меня!

person Khelina Fedorchuk    schedule 02.09.2019

Я также сталкиваюсь с той же проблемой «Объект OpenCV NoneType не имеет формы атрибута», и я решаю эту проблему, изменив местоположение изображения. Я также использую PyCharm IDE. В настоящее время мое местоположение изображения и файл класса находятся в одной папке. введите здесь описание изображения

person Md. Shofiulla    schedule 16.02.2020

У меня такая же проблема. У меня была открыта другая программа, которая использовала камеру моего ноутбука. Поэтому я закрыл эту программу, и тогда все заработало. Я нашел этот ответ, проверив https://howto.streamlabs.com/streamlabs-obs-9/black-screen-when-using-video-capture-device-elgato-hd-60s-9508.

person yishairasowsky    schedule 24.04.2020

У меня была эта проблема с cap = cv2.VideoCapture(0). Я изменил это на cap = cv2.VideoCapture(1), и тогда это сработало. Поскольку он не был связан с нужной веб-камерой, он ничего не возвращал. Может быть, это поможет удаче.

person cjHerold    schedule 11.05.2020

Я получал эту ошибку при попытке найти размер фотографии.

Exception has occurred: AttributeError 'NoneType' object has no attribute 'shape'

После 10-минутного гугления я наткнулся на эту ссылку OpenCV: Устранение ошибок NoneType, Адриан Роузброк. В этой статье он упомянул

Недопустимый путь к изображению, переданный в cv2.imread

Хотя это исправило мою проблему, я надеюсь, что это исправит вашу. Если нет, я надеюсь, что вы найдете что-то полезное и на этой странице.

person ath0rus    schedule 01.07.2021