Веб-камера не может показать картинку с OpenCV в Python 3.7 - PullRequest
1 голос
/ 13 июня 2019

Я использую следующий код, скопированный с сайта opencv:

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

Но изображение черное с белым шумом:

enter image description here

Я почти уверен, что проблема не в моем устройстве с веб-камерой, потому что я использую приложение "камера" в Windows 10, картинка может хорошо отображаться.

Ниже приведена моя среда Python:

Python : 3.7.1
OpenCV :  4.1.0.25 (also tried 3.4.5.20)
OS : windows 10
Webcam : Logitech C525

---------------------------- обновление --------------------------------

Я использую Anaconda Spyder для запуска того же кода, он отлично работает!

Проблема появляется только при использованииноутбук jupyter, любое решение?

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Попробуйте, вы можете использовать isOpened(), чтобы убедиться, что вы можете подключиться к камере.

from threading import Thread
import cv2, time

class VideoStreamWidget(object):
    def __init__(self, src=0):
        self.capture = cv2.VideoCapture(src)
        # Start the thread to read frames from the video stream
        self.thread = Thread(target=self.update, args=())
        self.thread.daemon = True
        self.thread.start()

    def update(self):
        # Read the next frame from the stream in a different thread
        while True:
            if self.capture.isOpened():
                (self.status, self.frame) = self.capture.read()
            time.sleep(.01)

    def show_frame(self):
        # Display frames in main program
        cv2.imshow('frame', self.frame)
        key = cv2.waitKey(1)
        if key == ord('q'):
            self.capture.release()
            cv2.destroyAllWindows()
            exit(1)

if __name__ == '__main__':
    video_stream_widget = VideoStreamWidget()
    while True:
        try:
            video_stream_widget.show_frame()
        except AttributeError:
            pass
0 голосов
/ 13 июня 2019

Если вы используете внешнюю веб-камеру, вы должны использовать cv2.VideoCapture (1) вместо cv2.VideoCapture (0).

Поскольку здесь 0 представляет внутреннюю веб-камеру, а 1 - внешнюю веб-камеру

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