Как изменить цвета рамки с помощью OpenCV, чтобы они были такими же, как отображение? - PullRequest
2 голосов
/ 05 августа 2020

Я не могу изменить цвета так, чтобы они были такими же, как мои естественные цвета диапозитива. Они всегда перевернуты. Я пробовал использовать разные цветовые пространства, но не могу заставить их работать. Я хочу, чтобы программа делала снимок моего экрана, но также могла определять определенные цвета на экране

import cv2
import numpy as np
import pyautogui


def nothing(x):
    pass


cv2.namedWindow("Tracking")
cv2.createTrackbar("LH", "Tracking", 0, 255, nothing)
cv2.createTrackbar("LS", "Tracking", 0, 255, nothing)
cv2.createTrackbar("LV", "Tracking", 0, 255, nothing)
cv2.createTrackbar("UH", "Tracking", 255, 255, nothing)
cv2.createTrackbar("US", "Tracking", 255, 255, nothing)
cv2.createTrackbar("UV", "Tracking", 255, 255, nothing)

while True:

    screenshot = pyautogui.screenshot()
    screenshot = np.array(screenshot)

    hsv = cv2.cvtColor(screenshot, cv2.COLOR_BGR2HSV) #

    l_h = cv2.getTrackbarPos("LH", "Tracking")
    l_s = cv2.getTrackbarPos("LS", "Tracking")
    l_v = cv2.getTrackbarPos("LV", "Tracking")

    u_h = cv2.getTrackbarPos("UH", "Tracking")
    u_s = cv2.getTrackbarPos("US", "Tracking")
    u_v = cv2.getTrackbarPos("UV", "Tracking")

    l_b = np.array([l_h, l_s, l_v])
    u_b = np.array([u_h, u_s, u_v])

    mask = cv2.inRange(hsv, l_b, u_b)

    res = cv2.bitwise_and(screenshot, screenshot, mask=mask)

    # cv2.imshow("screenshot", screenshot)
    cv2.imshow("mask", mask)
    cv2.imshow("res", res)

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

cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 06 августа 2020

Вы делаете снимок экрана с помощью Pyauto gui, который должен читать его в RGB вместо BGR, используемого в Opencv. Итак, после прочтения скриншота преобразуйте его в BGR.

screenshot = pyautogui.screenshot()
screenshot = np.array(screenshot)
screenshot = cv2.cvtColor(screenshot, cv2.COLOR_RGB2BGR)
...