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

Я нуб ie в программировании, и этот вопрос может показаться легким и глупым, но я действительно не могу этого сделать! Цель здесь - каждый раз, когда я нажимаю, менять цвет между зеленым, синим и красным. Извините, если это очевидно, но я на несколько часов застрял в этом. Это код, который у меня есть, который печатает каждый раз один цвет Теперь я хочу добавлять что-то, чтобы менять цвета каждый раз, когда я нажимаю.

import cv2
import numpy as np

def draw_circle(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(img,(x,y),100,color=(0,255,0),thickness=10)

cv2.namedWindow(winname='my_drawing')

cv2.setMouseCallback('my_drawing', draw_circle)

img = np.zeros((512,512,3),np.int8)

while True:

    cv2.imshow('my_drawing', img)
    if cv2.waitKey(20) &0xFF == 27:
        break

cv2.destroyAllWindows

Я пробовал много вещей, которые даже не знаю, с чего начать, но я пытался создать переменную внутри функции, которую каждый раз, когда она входит в функцию, она суммирует, и в зависимости от значения (используя if) она переходит к другому цвету, но переменная, похоже, не меняется, если она снова вводит l oop, Затем я попытался вернуть переменную. Нет успеха Добавление Параматера. Успеха тоже нет. Я считаю, что это так просто, что моя голова не может думать в этот момент.

1 Ответ

0 голосов
/ 05 апреля 2020

Вот один из способов ... составить список цветов, которые вы хотите прокрутить. Имейте глобальную переменную, которую вы используете в качестве индекса в списке, чтобы получить следующий цвет. Каждый раз, когда вы используете его, добавьте 1 к нему и уменьшите его по модулю длины списка цветов. Раскрасьте круг значением из списка цветов, индексированным индексом.

#!/usr/bin/env python3

import cv2
import numpy as np

index = 0
colours = [[255,0,0], [0,255,0], [0,0,255]]

def draw_circle(event,x,y,flags,param):
    global index
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(img,(x,y),100,color=colours[index],thickness=10)
        index = (index+1) % len(colours)

cv2.namedWindow(winname='my_drawing')

cv2.setMouseCallback('my_drawing', draw_circle)

img = np.zeros((512,512,3),np.int8)

while True:

    cv2.imshow('my_drawing', img)
    if cv2.waitKey(20) &0xFF == 27:
        break

cv2.destroyAllWindows

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...