OpenCV(4)--基本图形绘制

OpenCV实现基本图形绘制

画线

  • line(img,开始点,结束点,颜色…)
  • img:在哪个图像上画线
  • 开始点,结束点:指定线的开始与结束位置
  • 颜色、线宽、线型
  • Shift:坐标缩放比例
import cv2
import numpy as np

#创建黑色背景
img = np.zeros((480,640,3),np.uint8)
#画线 是一条竖线,所以坐标点为(x,y)
cv2.line(img,(10,20),(10,400),(0,0,255))
#颜色后参数:线宽、线型(只能取-1,4,8,16)
cv2.line(img,(10,20),(300,400),(0,0,255),5,4)

#显示img
cv2.imshow('draw',img)
cv2.waitKey(0)

画椭圆

  • ellipse(img,中心点,长款的一半,角度,从哪个角度开始,到哪个角度结束,…)
#画椭圆
#度数是按顺时针计算的
#0度是从左侧开始计算的
cv2.ellipse(img,(320,240),(100,50),0,0,360,(0,0,255))
#画矩形
cv2.rectangle(img,(10,10),(100,100),(0,0,255),-1)
#画圆
cv2.circle(img,(320,240),100,(0,0,255))
cv2.circle(img,(320,240),5,(0,0,255),-1)

画多边形

  • polylines(img,点集,是否闭环,颜色…)
  • 填充多边形:fillPoly(img,点集,颜色)
#画多边形
pts = np.array([(300,10),(150,100),(450,100)],np.int32) #创建点集,注意这里只能是int32类型
cv2.polylines(img,[pts],True,(0,0,255))
#填充三角形的颜色
cv2.fillPoly(img,[pts],(255,255,0))

画文本

  • putText(img,字符串,起始点,字体,字号,…)
#绘制文本
cv2.putText(img,"Hello World",(10,400),cv2.FONT_HERSHEY_PLAIN,1,(255,255,0))

【实战】鼠标绘制基本图像

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

#当前图像
# 0-drawline,1-drawrectangle,2-drawcircle
curshape = 0
startpos = (0,0)

#显示窗口和背景
img = np.zeros((480,640,3),np.uint8)

#鼠标回调函数
def mouse_callback(event,x,y,flags,userdata) :
    global curshape,startpos
    #鼠标左键按下
    if (event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN):
        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)

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,python,计算机视觉)