Python и Opencv: получение значений RGB в реальном времени при щелчке мышью - PullRequest
0 голосов
/ 27 июня 2019

Я написал код, который читает изображение и получает значения rgb с координатами нажатого пикселя, пока вы щелкаете мышью по экрану. Рабочий код ниже;

import cv2
import numpy as np


def mouseRGB(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDOWN: #checks mouse left button down condition
        colorsB = image[y,x,0]
        colorsG = image[y,x,1]
        colorsR = image[y,x,2]
        colors = image[y,x]
        print("Red: ",colorsR)
        print("Green: ",colorsG)
        print("Blue: ",colorsB)
        print("BRG Format: ",colors)
        print("Coordinates of pixel: X: ",x,"Y: ",y)

# Read an image, a window and bind the function to window
image = cv2.imread("image.jpg")
cv2.namedWindow('mouseRGB')
cv2.setMouseCallback('mouseRGB',mouseRGB)

#Do until esc pressed
while(1):
    cv2.imshow('mouseRGB',image)
    if cv2.waitKey(20) & 0xFF == 27:
        break
#if esc pressed, finish.
cv2.destroyAllWindows()

Но я хочу это; Я не хочу читать изображение, я хочу видеть поток видео в реальном времени на экране; и когда я щелкаю куда-то, я хочу видеть значения rgb и координаты щелчкового пикселя в любое время.

Как мне отредактировать мой код?

1 Ответ

1 голос
/ 27 июня 2019

Для захвата видео добавьте объект захвата

capture = cv2.VideoCapture(0)

0 - это номер камеры для моей веб-камеры, но если у вас есть 2-я камера USB, то, вероятно, это будет 1

Затем в цикле while прочитайте кадр из видеопотока, добавив

ret, frame = capture.read()

. Вы можете обрабатывать frame точно так же, как вы обрабатываете любое изображение.

Наконец, не забудьте освободить объект захвата, когда закончите,

capture.release()
cv2.destroyAllWindows()

Полный список кодов,

import cv2
import numpy as np


def mouseRGB(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDOWN: #checks mouse left button down condition
        colorsB = frame[y,x,0]
        colorsG = frame[y,x,1]
        colorsR = frame[y,x,2]
        colors = frame[y,x]
        print("Red: ",colorsR)
        print("Green: ",colorsG)
        print("Blue: ",colorsB)
        print("BRG Format: ",colors)
        print("Coordinates of pixel: X: ",x,"Y: ",y)


cv2.namedWindow('mouseRGB')
cv2.setMouseCallback('mouseRGB',mouseRGB)

capture = cv2.VideoCapture(0)

while(True):

    ret, frame = capture.read()

    cv2.imshow('mouseRGB', frame)

    if cv2.waitKey(1) == 27:
        break

capture.release()
cv2.destroyAllWindows()
...