Компьютерное зрение 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()))