12.Opencv大作业——实现鼠标绘制基本图形

#基本功能:

#可以通过鼠标进行基本图形的绘制

#1.可以画线:当用户按下L键时,即选择了画线,此时滑动鼠标即可画线

#2.可以画矩形:当用户按下r键,即可选择画矩形,此时滑动鼠标即可画矩形

#3.可以画圆:当用户按下c键,即可选择画圆。此时滑动鼠标即可画圆

# curshape: 0-drawline 1-drawrectangle 2-drawcircle

#基本功能:
#可以通过鼠标进行基本图形的绘制
#1.可以画线:当用户按下L键时,即选择了画线,此时滑动鼠标即可画线
#2.可以画矩形:当用户按下r键,即可选择画矩形,此时滑动鼠标即可画矩形
#3.可以画圆:当用户按下c键,即可选择画圆。此时滑动鼠标即可画圆

# curshape: 0-drawline  1-drawrectangle  2-drawcircle

from inspect import stack
import cv2
import numpy as np 

curshape = 0 #全局变量,当前图形
startpos = (0,0) #鼠标点

#显示窗口和背景
img = np.zeros((480,640,3),np.uint8)  #设置一个全黑的窗口

#鼠标回调函数
#当点击鼠标按下时,应该获取到起始点,当抬起鼠标按键时,应获取到鼠标终止点,在起始点和终止点之间画一条线
def mouse_callback(event,x,y,flags,userdata):  
    #print(event,x,y,flags, userdata)
    
   if (event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN):
       global curshape, startpos  #全局变量的声明
       startpos = (x,y)  #每次按下鼠标左键都会获得一个值
   elif (event & cv2.EVENT_LBUTTONUP == cv2.EVENT_LBUTTONUP):
        if curshape ==0: #drawline
            cv2.line(img,startpos,(x,y),(0,0,255))
        elif curshape ==1: #drawrectangle
            cv2.rectangle(img,startpos,(x,y),(0,0,255))
        elif curshape ==2: #drawcircle
            a = (x- startpos[0])
            b = (y- startpos[1])
            r= int((a**2+b**2)**0.5)  #计算圆的半径
            cv2.circle(img,startpos,r,(0,0,255))
        else:
            print('error:no shape')
  
#创建窗口
cv2.namedWindow('drawshape',cv2.WINDOW_NORMAL)
#设置鼠标回调
cv2.setMouseCallback('drawshape',mouse_callback,"123")

while True:
    cv2.imshow('drawshape',img)
    key = cv2.waitKey(1) & 0xFF
    if key  == ord('q'): #退出
        break
    elif key == ord('l'): #line
        curshape = 0
    elif key == ord('r'): #rectangle
        curshape = 1
    elif key == ord('c'): #circle
        curshape = 2

cv2.destroyAllWindows()

运行结果:

 Opencv基本图形绘制小结

画线、矩形、圆

画椭圆、多边形、多边形填充

画文字(中文有问题)

后期需学习:基本图像运算与处理、形态学、轮廓查找

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一款非常强大的计算机视觉库,其中包含了很多功能强大的图像处理和计算机视觉算法。而在这个系列的第三篇文章中,我们将重点介绍如何在OpenCV绘制图形和文本。 OpenCV绘制图形的函数包括cv2.line(直线),cv2.rectangle(矩形),cv2.circle(圆),cv2.ellipse(椭圆)和cv2.putText(文本)。这些函数的使用非常简单,只需要指定图像,开始点和结束点(或中心点和半径),颜色和线宽即可。 例如,我们可以使用cv2.rectangle函数在图像绘制一个矩形: ``` import cv2 import numpy as np img = np.zeros((512,512,3), np.uint8) # 创建一个黑色的图像 cv2.rectangle(img,(384,0),(510,128),(0,255,0),3) # 绘制矩形 cv2.imshow("image",img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,我们首先创建了一个512x512的黑色图像,然后使用cv2.rectangle函数在图像绘制了一个矩形,并将其显示出来。在这里,矩形的左上角坐标是(384,0),右下角坐标是(510,128),颜色是绿色(0,255,0),线宽为3。 除了绘制图形,我们也可以使用cv2.putText函数在图像绘制文本。这个函数的使用也非常简单,只需要指定图像,文本内容,位置,字体,字体大小和颜色即可。 例如,我们可以使用cv2.putText函数在图像上写入一个“Hello World!”的文本: ``` import cv2 import numpy as np img = np.zeros((512,512,3), np.uint8) # 创建一个黑色的图像 font = cv2.FONT_HERSHEY_SIMPLEX # 设置字体 cv2.putText(img,'Hello World!',(10,500), font, 1,(255,255,255),2,cv2.LINE_AA) # 绘制文本 cv2.imshow("image",img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,我们使用cv2.putText函数在左下角绘制了一个“Hello World!”的文本,并将其显示出来。在这里,我们首先选取了字体类型为cv2.FONT_HERSHEY_SIMPLEX,然后指定了文本的位置(10,500),字体大小为1,颜色为白色(255,255,255),线宽为2,并且使用了cv2.LINE_AA参数,以实现更好的文本渲染效果。 综上所述,OpenCV中可以很方便地对图像进行绘制和文本处理,这对于图像处理和计算机视觉应用来说是非常重要的一步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值