【发布时间】:2018-11-12 04:57:30
【问题描述】:
我一直在尝试制作一个 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()
错误:回溯(最后一次调用): 文件“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() 参数必须是字符串、类似字节的对象或数字,而不是“元组”
【问题讨论】:
-
尝试 (int((ix+x)/2), int((iy+y)/2)) 代替 int(((ix+x)/2,(iy+y) /2))
-
谢谢 :) 成功了。
标签: python numpy opencv image-processing