Отображение подачи камеры в оттенках серого в python с помощью opencv

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

    import cv2
    import numpy as np
    clicked = False
    def onMouse(event, x, y, flags, param):
        global clicked
        if event == cv2.cv.CV_EVENT_LBUTTONUP:
            clicked = True

    cv2.namedWindow('image capture', cv2.WINDOW_NORMAL)
    cv2.setMouseCallback('image capture', onMouse)
    #initialize the camera object with VideoCapture
    camera = cv2.VideoCapture(0)
    sucess, frame = camera.read()
    cv2.imwrite('snapshot.png', frame)
    gray = cv2.imread('snapshot.png', cv2.IMREAD_GRAYSCALE)
    while sucess and cv2.waitKey(1) == -1 and not clicked:
        cv2.imwrite('snapshot.png', frame)
        gray = cv2.imread('snapshot.png', cv2.IMREAD_GRAYSCALE)
        cv2.imshow('image capture', gray)
        sucess, frame = camera.read()

    cv2.imwrite('snapshot.png', frame)
    print 'photo taken press any key to exit'
    cv2.waitKey()
    cv2.destroyAllWindows()

Здесь я сохранил кадр в "snapshot.png" и снова загрузил его в градациях серого и отобразил это изображение в градациях серого. Есть ли способ напрямую прочитать кадр камеры в оттенках серого, вместо того, чтобы пройти через весь этот беспорядок. Заранее спасибо.

2 ответа

Решение

Вау, какой беспорядок;)

Вы просто хотите:

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

В последней версии opencv cvtColor ожидает, что его scr будет не None, и поэтому выдает ошибку 215-утверждения. В основном это похоже на сценарий, в котором вы должны использовать блок catch и пытаться обрабатывать исключения.

Код для решения этой проблемы:

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

    if frame.any():
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    cv2.imshow('frame', gray)
Другие вопросы по тегам