Ошибка при попытке вывести видео с камеры OpenCV

Пытаюсь отобразить видео с видеокамеры.

Код:

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
 
while(True):
 ret, frame = cap.read()
 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 
 cv2.imshow('frame',gray)
 if cv2.waitKey(1) & 0xFF == ord('q'):
   break
cap.release()
cv2.destroyAllWindows()

При запуске возникает ошибка:

OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

Остановка происходит на строке:

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

при этом светодиодный индикатор на самой видеокамере загорается. Путь указанный в ошибке:
D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182
не понимаю откуда берется. У меня вообще нет диска D: на компьютере.

read возвращает следующее: ret = False, frame = None

Помогите пожалуйста.


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

Автор решения: S. Nick

Попробуйте так:

import cv2


#cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture(cv2.CAP_DSHOW, 0)                        # <----
 
while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 
    cv2.imshow('frame', gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
        
cap.release()
cv2.destroyAllWindows()

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

→ Ссылка
Автор решения: strawdog

нужно явно указать тип api камеры, и, желательно, делать проверку на открытие:

import cv2
cap = cv2.VideoCapture()
cap.open(0, cv2.CAP_DSHOW)

if not cap.isOpened():
    raise IOError("Cannot open webcam")

while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

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

→ Ссылка