1. 知识点
- cv.namedWindow() 创建一个窗口;
- cv.createTrackbar() 创建一个轨迹栏;
- cv.getTrackbarPos() 获取对应轨迹栏的轨迹位置;
- cv.waitKey() 键盘操作返回对应的key。
2. cv.namedWindow() 函数说明
- 函数使用
cv.namedWindow(winname, flags=None)
- 参数说明
| 参数 | 说明 |
|---|
| winname | 表示创建窗口的名称。 |
| flags | 表示创建的窗口类型。 |
- flags 说明
| 值 | 说明 |
|---|
| WINDOW_NORMAL | 表示显示图像后,允许用户随意调整窗口大小。 |
| WINDOW_AUTOSIZE | 表示根据图像大小显示窗口,不允许用户调整大小。 |
| WINDOW_KEEPRATIO | 表示保持图像的比例。 |
3. cv.createTrackbar() 函数说明
- 函数使用
cv.createTrackbar(trackbarname, winname, value, count, trackbarcallback, userdata)
- 参数说明
| 参数 | 说明 |
|---|
| trackbarname | 表示轨迹栏的名称。 |
| winname | 表示附加到的窗口名称。 |
| value | 一个指向整形的指针, 表示滑块的位置。 创建时,滑块的初始位置就是该变量当前的值。 |
| count | 表示滑块可以达到的最大位置的值。 滑块最小位置的值始终为0。 |
| trackbarcallback | 表示执行的回调函数每次跟踪栏值更改。【回调函数始终具有默认参数,即轨迹栏位置。】 |
| userdata | 表示默认值0。这个参数是用户传递给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value是全局变量,完全可以不去管这个userdata参数。 |
- trackbarcallback回调流程

4. cv.getTrackbarPos() 函数说明
- 函数使用
cv.getTrackbarPos(trackbarname, winname)
- 参数说明
| 参数 | 说明 |
|---|
| trackbarname | 表示轨迹栏的名称。 |
| winname | 表示轨迹栏依托窗口的名称。 |
5. cv.waitKey() 函数说明
- 函数使用
cv.waitKey(delay=0)
- 参数说明
- delay 值说明
| 值 | 说明 |
|---|
| 0或者不填写 | 表示一直阻塞。 |
| 大于0 | 表示阻塞指定毫秒数。 |
- 注意
该函数的返回值,在不同的操作系统中可能会有差异。
6. cv.imshow() 函数说明
- 函数使用
cv.imshow(winname, mat)
- 参数说明
| 参数 | 说明 |
|---|
| winname | 表示需要显示图像的窗口名称。 |
| mat | 表示需要显示的图像。 |
7. 调整图像的亮度
7.1 分析
- RGB 表示图像的亮度;
- RGB 的取值范围[(0,0,0)-(255,255,255)];
- 图像像素运算可以改变 RGB 的值。
7.2 代码实现
import cv2 as cv
import numpy as np
def trackbarcallback(value):
print(value)
pass
def adjust_brightness_demo():
img = cv.imread('./images/butterfly.jpg')
img_copy = np.zeros_like(img)
cv.namedWindow('adjust_brightness')
cv.createTrackbar('progress', 'adjust_brightness', 0, 100, trackbarcallback)
while 1:
cv.imshow('adjust_brightness', img_copy)
key = cv.waitKey(10)
if key == 27:
break
value = cv.getTrackbarPos('progress', 'adjust_brightness')
value = np.uint8(value)
img_copy[:] = (value, value, value)
img_copy = cv.add(img, img_copy)
cv.destroyAllWindows()
if __name__ == "__main__":
adjust_brightness_demo()
7.3 实现结果

7.4 注意
- np.zeros_like 只是生成了一个和img图像一致的矩阵,但是值都是0,因此循环第一次显示的图像是黑色;
- 由于10毫秒的阻塞,肉眼观察不到,没有进行操作,因此执行了cv.add将黑色图片和原图进行了加法计算,所以最后肉眼看到的是显示原图。
8. 键盘响应进行不同操作
8.1 分析
- 监听键盘的操作值,cv.waitKey;
- 【按1】显示 HSV 图像;
- 【按2】显示 YCrCb 图像;
- 【按3】显示 RGB 图像;
- 【按0】显示 BGR 图像;
8.2 代码实现
import cv2 as cv
import numpy as np
def handle_key():
img = cv.imread('./images/butterfly.jpg')
img_copy = cv.add(img, np.zeros_like(img))
cv.namedWindow('waitkey')
while 1:
cv.imshow('waitkey', img_copy)
key = cv.waitKey(10)
if key == 27:
break
elif key == 48:
img_copy = img
elif key == 49:
img_copy = cv.cvtColor(img, cv.COLOR_BGR2HSV)
elif key == 50:
img_copy = cv.cvtColor(img, cv.COLOR_BGR2YCrCb)
elif key == 51:
img_copy = cv.cvtColor(img, cv.COLOR_BGR2RGB)
cv.destroyAllWindows()
if __name__ == "__main__":
handle_key()
8.3 实现结果

9. 总结
- cv.createTrackbar() 的回调是必填参数,不填写会报错;
TypeError: function takes exactly 5 arguments (4 given)
- cv.getTrackbarPos() 获取对应窗口中对应轨迹栏的当前值;
- cv.imshow() 用于在指定的窗口中显示图像;
- cv.waitKey() 表示阻塞指定毫秒数。如果0或者不填写表示一直阻塞!