滑动条可以动态调节参数控制图像,达到所需的效果。主要应用函数cv2.creatTrackbar()与函数cv2.getTrackbarPos(),下面详细介绍各函数参数。
1. cv2.creatTrackbar(trackbarName,windowName,value,count,onChange)
参数:
- trackbarName:滑动条的名称
- windowName:所在窗口的名称
- value: 滑块起始值
- count: 滑块最大值
- onChange: 回调函数,即当滑块位置改变时就会调用的函数,并且回调函数第一个参数为滑块位置所对应的值
2. cv2.getTrackbarPos(trackbarname, winname)
参数:
- trackbarname:选择的滑动条名称
- winname:选择的滑动条所在窗口的名称
返回值:
滑块对应位置的值
下面以一个具体案例来实现通过滑动条改变灰度图像亮度的目的。为了对回调函数有一个直观的初理解,现通过两种方式实现效果。
不使用回调函数,代码如下:
import cv2
import numpy as np
#创建一个(500,500)的numpy数组
img=np.zeros((500,500),dtype='uint8')
#新建一个窗口
cv2.namedWindow('img')
#定义回调函数,这里pass表示不做任何事,用作占位语句保持程序结构的完整性
def nothing(x):
pass
#新建一个滑动条
cv2.createTrackbar('intensity','img',0,255,nothing)
while(1):
cv2.imshow('img',img)
#返回滑块所在位置对应的值
intensity=cv2.getTrackbarPos('intensity','img')
img[:]=[intensity]
if cv2.waitKey(1)==ord('q'):
break
cv2.destroyAllWindows()
使用回调函数,代码如下:
import cv2
import numpy as np
#创建一个(500,500)的numpy数组
img=np.zeros((500,500),dtype='uint8')
#新建一个窗口
cv2.namedWindow('img')
#定义回调函数,参数x为函数cv2.createTrackbar()传递的滑块位置对应的值
def img_intensity_change(x):
img[:]=[x]
#新建一个滑动条
cv2.createTrackbar('intensity','img',0,255,img_intensity_change)
while(1):
cv2.imshow('img',img)
if cv2.waitKey(1)==ord('q'):
break
cv2.destroyAllWindows()
gif效果如下:
#视频效果欢迎关注我的微信公众号(csdn不会发,所以顺便就打个小广告~~)