используйте cv2.VideoCapture для захвата изображения - PullRequest
0 голосов
/ 18 мая 2019

Я хочу использовать веб-камеру моего ноутбука, чтобы сделать снимок, используя код ниже:

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


cv2.destroyAllWindows()

но выдает эту ошибку:

cv2.imshow ('frame', frame) cv2.error: OpenCV (4.0.0) C: \ Проекты \ OpenCV-питон \ OpenCV \ модули \ highgui \ SRC \ window.cpp: 350: ошибка: (-215: утверждение не выполнено) size.width> 0 && size.height> 0 in функция 'cv :: imshow'

Как я могу исправить эту ошибку?

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Когда OpenCV имеет проблему с получением кадра с камеры или потока, это не вызывает ошибку, но возвращает False в ret (возвращение статуса), так что вы должны проверить это.Он также возвращает None в frame и imshow имеет проблему с отображением None - он не имеет ширины и высоты - поэтому вы получаете ошибку с size.width>0 && size.height>0

Как я знаю, в основном веб-камера ноутбука имеетчисло 0, а не 1

Это работает с веб-камерой моего ноутбука

import cv2

cap = cv2.VideoCapture(0) # zero instead of one

while True:
    ret, frame = cap.read()

    if not ret: # exit loop if there was problem to get frame to display
        break

    cv2.imshow('frame', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

РЕДАКТИРОВАТЬ: , как сказал Дейв В. Смит в комментарии:для некоторых ноутбуков может потребоваться время для отправки правильного изображения, а затем версия, которая не выходит из цикла

while True:
    ret, frame = cap.read()

    if ret: # display only if status (ret) is True and there is frame
        cv2.imshow('frame', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
0 голосов
/ 18 мая 2019
import numpy as np
import cv2

cap = cv2.VideoCapture(0)  #it can be one also...but generally zero

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    cv2.imshow('Capture', frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Попробуйте это ... это работает для моего ... убедитесь, что numpy установлен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...