Отображение подачи камеры в оттенках серого в 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)