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 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加