Opencv进阶版调色盘(融合了调色盘与鼠标事件)

我们前几章学习了鼠标事件以及调色盘,今天我们就来试下进阶版调色盘~

我来说一下思路,进阶调色盘=调色盘+高级鼠标事件,只要将两个东西结合一块,就完成了!

今天要直接放源码(源码中我会写注释的,不要慌~)

 

# -*- coding:utf-8 -*-
"""
Created on Tue Jan 09 10:24:11 2017

@author: Y

"""

#调用库
import cv2
import numpy as np
#定义空语句,简单而言就是定义语句完整
def nothing(x):
    pass
# 当鼠标没有按下时,默认为False;当鼠标按下时则变为 True
drawing=False
# 如果 mode变为True则绘制矩形。当按下键盘m时,变成绘制点(有半径的点,圆?我强迫症又犯了=。=)
mode=True
#线宽-1表示填充
ix,iy=-1,-1
# 创建回调函数,将RGB回调函数写入鼠标事件中
def draw_circle(event,x,y,flags,param):
    r=cv2.getTrackbarPos('R','image')
    g=cv2.getTrackbarPos('G','image')
    b=cv2.getTrackbarPos('B','image')
    color=(b,g,r)
    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),color,-1)
            else:
# 不要让我的强迫症停下,不要停!!!反正连成线=。=
                cv2.circle(img,(x,y),3,color,-1)
# 当鼠标松开停止绘画。
        elif event==cv2.EVENT_LBUTTONUP:
            drawing==False
#创建画板,命名窗口,创建对应的回调函数
img=np.zeros((512,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)
cv2.setMouseCallback('image',draw_circle)
while(1):
    cv2.imshow('image',img)
    k=cv2.waitKey(1)&0xFF
    if k==ord('m'):
        mode=not mode
    elif k==27:
        break
#销毁窗口
cv2.destroyAllWindows()
进阶版最初的样子,乌漆墨黑
没按下m时画的
按下m后的画的画面,不堪忍睹
又按下了m,我好想精神病一样,“我出去了,我进来了,我又出去了,我又进来了,进来了”(不堪入目,捂脸=。=)

 

  好像就要过小年了啊,时间过得真快,不知道自博客开始以来大家都学到了一点东西没有。我是Y,提前祝大家小年快乐,真的希望看了博客的朋友们可以在下方留下你们的箴言,你们的留言对我而言十分重要,谢谢大家支持!

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注