用opencv简单绘图

绘图

#绘图
#创建一个图片
img=np.zeros((512,512,3),np.uint8)
#画直线:图像,起点,终点,线条颜色,线条类型
cv2.line(img,(20,20),(500,500),(255,255,0),1)
#画矩形:图像,左上角坐标,右下角坐标,线条颜色,线条类型
cv2.rectangle(img,(280,0),(450,128),(0,255,0),3)
#画圆:图像,中心点坐标,半径大小,线条颜色,线条类型=1时,表示填充
cv2.circle(img,(355,60),55,(255,0,255),-1)
#画椭圆:图像,中心点坐标,(长轴距离,短轴距离),椭圆沿逆时针方向旋转的角度,椭圆弧沿顺时针方向起始的角度和结束的角度,线条颜色,线条类型
cv2.ellipse(img,(256,256),(150,50),0,0,180,(0,255,0),-1)
#画多边形,这里画一个黄色的具有5个顶点的多边形
pts=np.array([[30,60],[80,90],[110,160],[150,310],[180,290]],np.int32)#将各个点的坐标记录下来,数据类型一定要为int32
pts=pts.reshape((-1,1,2))#矩阵重组,1在哪里,表示这一维的长度是由为1的维度确定的,(1,-1)表示行,(-1,1)表示列
cv2.polylines(img,[pts],True,(0,255,255))#画很多条线,参数:图像,矩阵,第三个如果是False,我们得到的图像不是闭合的,线条颜色
#在图片上添加文字
font=cv2.FONT_HERSHEY_SIMPLEX
'''
其中字体可以选择 
FONT_HERSHEY_SIMPLEX 
Python: cv.FONT_HERSHEY_SIMPLEX 
normal size sans-serif font

FONT_HERSHEY_PLAIN 
Python: cv.FONT_HERSHEY_PLAIN 
small size sans-serif font

FONT_HERSHEY_DUPLEX 
Python: cv.FONT_HERSHEY_DUPLEX 
normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)

FONT_HERSHEY_COMPLEX 
Python: cv.FONT_HERSHEY_COMPLEX 
normal size serif font

FONT_HERSHEY_TRIPLEX 
Python: cv.FONT_HERSHEY_TRIPLEX 
normal size serif font (more complex than FONT_HERSHEY_COMPLEX)

FONT_HERSHEY_COMPLEX_SMALL 
Python: cv.FONT_HERSHEY_COMPLEX_SMALL 
smaller version of FONT_HERSHEY_COMPLEX

FONT_HERSHEY_SCRIPT_SIMPLEX 
Python: cv.FONT_HERSHEY_SCRIPT_SIMPLEX 
hand-writing style font

FONT_HERSHEY_SCRIPT_COMPLEX 
Python: cv.FONT_HERSHEY_SCRIPT_COMPLEX 
more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX

FONT_ITALIC 
Python: cv.FONT_ITALIC 
flag for italic font
'''
cv2.putText(img,'opencv',(20,500),font,4,(255,255,255),5)#图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细
cv2.imshow('image',img)
cv2.waitKey(0)
#cv2.destroyAllWindows()

把鼠标当画笔

函数格式都一样,拥有的函数:

#['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON',
# 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY', 'EVENT_LBUTTONDBLCLK',
# 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_MBUTTONDOWN', 'EVENT_MBUTTONUP',
# 'EVENT_MOUSEHWHEEL', 'EVENT_MOUSEMOVE', 'EVENT_MOUSEWHEEL', 'EVENT_RBUTTONDBLCLK',
# 'EVENT_RBUTTONDOWN', 'EVENT_RBUTTONUP']

##双击过的地方画圆

def draw_circle(event,x,y,flags,param):
    if event==cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img,(x,y),100,(255,0,0),-1)
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
    cv2.imshow('image',img)
    if cv2.waitKey(20)==ord('q'):
        break
cv2.destroyAllWindows()

根据我们选择的模式再拖动鼠标是绘制矩形或圆形或矩形

#根据我们选择的模式再拖动鼠标是绘制矩形或圆形或矩形
#当鼠标按下时变为True
drawing=False
#如果mode为True 绘制矩形。按下m后变成绘制曲线
mode=True
ix,iy=-1,-2
#创建回调函数
def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing,mode#这个一定要写啊
#按下左键是返回起始坐标位置
    if event==cv2.EVENT_LBUTTONDOWN:
        drawing=True
        ix,iy=x,y
#当鼠标左键按下并移动是绘制图形。event可以查看移动,flag查看是否按下
    elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
        if drawing==True:
            if mode==True:
                cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                #绘制圆圈,小圆点连在一起就成了线,3代表了笔画的粗细
                cv2.circle(img,(x,y),3,(0,255,0),-1)
    elif event==cv2.EVENT_LBUTTONUP:
        drawing=False

img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
    cv2.imshow('image',img)
    k=cv2.waitKey(1)
    if k==ord('m'):
        mode=not mode
    elif k==27:
        break
cv2.destroyAllwindows()

#用滑动条做调色板

def nothing(x):
    pass

img=np.zeros((300,512,3),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R','image',0,255,nothing)#滑条名字,放置的窗口的名字,滑条的默认位置,滑条的最大值,回调函数
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
switch='0:OFF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing)
while(1):
    cv2.imshow('image',img)
    k=cv2.waitKey(1)
    if k==27:
        break
    r=cv2.getTrackbarPos('R','image')
    g=cv2.getTrackbarPos('G','image')
    b=cv2.getTrackbarPos('B','image')
    s=cv2.getTrackbarPos(switch,'image')

    if s==0:
        img[:]=0
    else :
        img[:]=[b,g,r]
cv2.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值