Компьютерное зрение openCV2 pyautogui

Я пытаюсь немного узнать о компьютерном зрении, и здесь не так много мудрости, поэтому заранее прошу прощения…

В конечном итоге я пытаюсь создать своего рода логическое утверждение о выделении цветов из того, что захватывается в формате RGB. IE, (RGB, если захвачено 255,0,0 или вероятность (?) Логической точки / триггера сбудется) Приведенный ниже код сделает снимок экрана того, что происходит с pyautogui на моем рабочем столе, а также напечатает то, что происходит print(frame) как цикл выполняется..

from imutils.video import VideoStream
from imutils.video import FPS
import numpy as np
import imutils
import time
import cv2
import pyautogui

fps = FPS().start()

while True:
    # grab the frame from the threaded video stream and resize it
    # to have a maximum width of 400 pixels
    frame = np.array(pyautogui.screenshot(region = (0,200, 800,400)))
    frame = cv2.cvtColor((frame), cv2.COLOR_RGB2BGR)
    frame = imutils.resize(frame, width=400)
    print(frame)


    # show the output frame
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF

    # if the `q` key was pressed, break from the loop
    if key == ord("q"):
        break

    # update the FPS counter
    fps.update()

# stop the timer and display FPS information
fps.stop()
print("[INFO] elapsed time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))

Я вижу в консоли, как цикл выполняет массивы чисел в матричном формате. Можно ли извлечь цветовые коды RGB отсюда или это просто пиксельные представления объектов? Или как цветное, так и пиксельное представление объектов?

"Рамка" - это то, что я создаю в imshow openCV2, и он почти появляется на каждом цветном скриншоте, снятом через pyautogui. Я вижу его в левом нижнем углу в матричном формате консоли и выводим формат RGB для сине-красного и белого цветов.

Я использую IDLE 3.6 на ноутбуке с Windows 10 для этого эксперимента и запускаю файл.py через Windows CMD. В конечном счете возможно ли создать логический триггер для диапазона блюза или диапазона красного и белого??? Спасибо...

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

1 ответ

Решение

Очень просто, этот пост в блоге объясняет все это: https://www.pyimagesearch.com/2014/03/03/charizard-explains-describe-quantify-image-using-feature-vectors/

Стоит обратить внимание на то, что цвета идут в порядке BGR, а не RGB... Добавьте это в цикл:

means = cv2.mean(frame)
means = means[:3]
print(means)

Конечный продукт будет таким, чтобы печатать, какие цвета поступают через BGR:

from imutils.video import VideoStream
from imutils.video import FPS
import numpy as np
import imutils
import time
import cv2
import pyautogui

fps = FPS().start()

while True:
    # grab the frame from the threaded video stream and resize it
    # to have a maximum width of 400 pixels
    frame = np.array(pyautogui.screenshot(region = (0,200, 800,400)))
    frame = cv2.cvtColor((frame), cv2.COLOR_RGB2BGR)
    frame = imutils.resize(frame, width=400)

    #grab color in BGR order, blue value comes first, then the green, and finally the red
    means = cv2.mean(frame)
    #disregard 4th value
    means = means[:3]
    print(means)


    # show the output frame
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF

    # if the `q` key was pressed, break from the loop
    if key == ord("q"):
        break

    # update the FPS counter
    fps.update()

# stop the timer and display FPS information
fps.stop()
print("[INFO] elapsed time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
Другие вопросы по тегам