Динамически нарисовать круг с помощью мыши в openCV - PullRequest
0 голосов
/ 02 июня 2018

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

import numpy as np
import cv2 as cv
import math
drawing = False # true if mouse is pressed
ix,iy = -1,-1
# mouse callback function
def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing
    if event == cv.EVENT_LBUTTONDOWN:
        drawing = True
        ix,iy = x,y
    elif event == cv.EVENT_MOUSEMOVE:
        if drawing == True:
             k = cv.waitKey(33)

             if k == ord('r'):
                cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
             elif k==ord('c'):
                cv.circle(img,int(((ix+x)/2,(iy+y)/2)),int(math.sqrt( ((ix-x)**2)+((iy-y)**2) )),(0,0,255),-1)
             elif k== ord('l'):
                cv.line(img,(ix,iy),(x,y),(255,0,0),5)
    elif event == cv.EVENT_LBUTTONUP:
        drawing = False
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
    break
cv.destroyAllWindows()

ОШИБКА: Traceback (последний вызов был последним): File "mouse.py ", строка 19, в draw_circle cv.circle (img, int (((ix + x) / 2, (iy + y) / 2)), int (math.sqrt (((ix-x) ** 2) + ((iy-y) ** 2))), (0,0,255), - 1) Аргумент TypeError: int () должен быть строкой, байтовоподобным объектом или числом, а не «кортежем»

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