1.创建滑动条
函数:cv2.getTrackbarPos(trackbarname, winname)
参数含义:trackbarnname:滑动条的名字; winname : 滑动条所在窗口的名字
下边这个例子通过用滑动条来改变图片的背景颜色(默认为黑色)
import numpy as np
import cv2
def nothing(x):
pass
#创建一幅黑色图像
img=np.zeros((500,512,3))
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:0FF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(1)&0xFF
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:
#冒号表示b,g,r
img[:]=[b,g,r]
cv2.destroyAllWindows()
再结合上篇文章讲的用鼠标画圆形或矩形,就可以写一个画板的代码。
import cv2
import numpy as np
def nothing(x):
pass
#鼠标按下时变为True
drawing=False
#如果mode为True时,绘制矩形
mode=True
ix,iy=-1,-1
def draw_circle(event,x,y,flags,param):
r = cv2.getTrackbarPos('R', 'image')
g = cv2.getTrackbarPos('G', 'image')
b = cv2.getTrackbarPos('B', 'image')
color=(r,g,b)
#若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
global ix,iy,drawing,mode
#鼠标按下
if event==cv2.EVENT_LBUTTONDOWN:
drawing=True
ix,iy=x,y
#鼠标移动和拖拽事件
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))
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(1)&0xFF
if k==ord('m'):
mode=not mode
#esc键
elif k==27:
break
ps:文章中的笔记都是根据OPENCV-PYTHON中文教程这本书的内容整理出来的,代码加了许多注释,非常容易理解。如果对这本书感兴趣,可以点击下方链接:https://pan.baidu.com/s/1UlWFgHmTuaj8TV55qpgHtw 提取码:f64k