weixin_46309121 2021-03-10 16:04 采纳率: 80%
浏览 36
已采纳

openCV绘画变量异常

import cv2

import numpy as np

thickness=-1

mode=1

d=400

def draw_circle(event,x,y,flags,param):

    if event==cv2.EVENT_LBUTTONDOWN:

        a=np.random.randint(1,d-50)

        r=np.random.randint(1,d/5)

        angle = np.random.randint(0,361)

        color = np.random.randint(0,high = 256,size = (3,)).tolist()

    if mode==1:

        cv2.rectangle(img,(x,y),(a,a),color,thickness)

    elif mode==2:

        cv2.circle(img,(x,y),r,color,thickness)

    elif mode==3:

        cv2.line(img,(a,a),(x,y),color,3) 

    elif mode==4:

        cv2.ellipse(img, (x,y), (100,150), angle, 0, 360,color,thickness) 

    elif mode==5:

        cv2.putText(img,'OpenCV',(0,round(d/2)), 

            cv2.FONT_HERSHEY_SIMPLEX, 2,color,5) 

img=np.ones((d,d,3),np.uint8)*255

cv2.namedWindow('image')

cv2.setMouseCallback('image',draw_circle)

while(1):

    cv2.imshow('image',img)

    k=cv2.waitKey(1)&0xFF

    if k==ord('r'):

        mode=1

    elif k==ord('c'):

        mode=2

    elif k==ord('l'):

        mode=3

    elif k==ord('e'):

        mode=4

    elif k==ord('t'):

        mode=5

    elif k==27:

        break 

cv2.destroyAllWindows()

  • 写回答

2条回答 默认 最新

  • coagenth 2021-03-10 16:20
    关注

    这是因为在执行函数时,没有左键单击时,程序就开始执行第二条if 语句,读取参数a时因没有定义和赋值,当然会报错,应该将第一个判断语句块后面的if...elif...整个代码块缩进一个tab,作为第一个判断语句的一部分,这样就不会报错了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据