компьютерное зрение openCV2 pyautogui - PullRequest
0 голосов
/ 26 октября 2018

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

В конечном итоге я пытаюсь создать своего рода логическое утверждение о выделении цветов из того, что захватывается в формате 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. В конечном счете возможно ли создать логический триггер для диапазона блюза или диапазона красного и белого ??? Спасибо ...

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 30 октября 2018

Очень просто, этот пост в блоге объясняет все это: 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()))
...