OpenCV и Python Создание прямоугольника движением мыши, проблема с назначением значений - PullRequest
0 голосов
/ 08 ноября 2019

Я новичок в Python ... У меня проблема с назначением значений. Я пытаюсь нарисовать периметр прямоугольника с помощью мыши, работающей в качестве индикатора. Код ниже, как я пытаюсь достичь этого.

import numpy as np
import cv2
from matplotlib import pyplot as plt

start = None
current = None
save = False


def drawRectangle():
    def getPoint(event, x, y, flags, param):
        global start
        global current
        global save
        if event == cv2.EVENT_LBUTTONDOWN:
            start = (x, y)
            save = False
        elif event == cv2.EVENT_MOUSEMOVE:
            current = (x, y)
        elif event == cv2.EVENT_LBUTTONUP:
            save = True
            start = None
            current = None

    img = np.zeros((512, 512, 3), np.uint8)
    black_img = np.zeros((512, 512, 3), np.uint8)

    cv2.namedWindow('image')
    cv2.setMouseCallback('image', getPoint, img)
    while (1):
        global save
        if start is not None:
            img = black_img
            cv2.rectangle(img, start, current, (0, 255, 0), 1)
        if save is True:
            black_img = img
            save = False
        cv2.imshow('cpy', black_img)
        cv2.imshow('image', img)

        if cv2.waitKey(20) & 0xFF == 27:
            break
    cv2.destroyAllWindows()


if __name__ == '__main__':
    drawRectangle()

Проблема в том, что black_img присваивается то же значение, что и img в строке img = black_img, и я, честно говоря, понятия не имею, почему. Чтобы показать проблему, я также включил окно с black_img, которое совпадает с окном с img https://zapodaj.net/images/12be96b535246.png - как это выглядит

Мне удалось как-то решить эту проблему, создав новый черныйизображение с img = np.zeros((512, 512, 3), np.uint8) внутри if start is not None: вместо назначения black_img, но это делает невозможным рисование нескольких прямоугольников. https://zapodaj.net/images/088c86020ebc1.png - как это выглядит

Я застрял на этой проблеме некоторое время ... Пожалуйста, помогите.

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