Вы не показываете, откуда берется ваша переменная img
. Но почему-то это None
вместо того, чтобы содержать данные изображения.
Часто это происходит, когда вы пишете функцию, которая должна возвращать действительный объект для img
, но вы забываете включить в функцию оператор return
, поэтому он автоматически возвращает None
.
Проверьте код, который создает img
.
ОБНОВЛЕНИЕ
Ответ на ваш код:
Было бы полезно если бы вы могли предоставить минимальный воспроизводимый пример . Это может выглядеть примерно так:
import cv2
cap = cv2.VideoCapture(0)
if cap.isOpened():
ret, img = cap.read()
if img is None:
print("img was not returned.")
else:
crop_img = img[70:300, 70:300]
print(crop_img) # should show an array of image data
Глядя на документацию , кажется, что ваша камера, возможно, не захватила ни одного кадра к моменту достижения этой точки в вашем коде. Документация гласит: «Если ни один кадр не был захвачен (камера была отключена или в видеофайле больше нет кадров), методы возвращают false, а функции возвращают указатель NULL». Могу поспорить, что функция .read()
возвращает указатель NULL, который преобразуется в None
при отправке обратно в Python.
К сожалению, поскольку никто другой не настроил вашу камеру, другие люди могут иметь проблемы с воспроизведением вашей проблемы.
Приведенный выше код прекрасно работает на моем MacBook Pro, но я должен дать терминалу разрешение на использование камеры при первой попытке ее попробовать. Вы пытались перезапустить приложение терминала? Ваша программа имеет доступ к камере?