详解OpenCV的窗口滑动条创建控制函数createTrackbar()
函数createTrackbar()可实现创建窗口滑动条,通过鼠标拖动滑动条控制某个参数的值,从而观察不同参数情况下窗口的图像输出结果。
函数createTrackbar()的原型如下:
- int cv::createTrackbar(const String & trackbarname,
- const String & winname,
- int * value,
- int count,
- TrackbarCallback onChange = 0,
- void * userdata = 0)
复制代码
各参数意义如下:
trackbarname—滑动条显示在窗口中的名字;
winname—滑动条所在窗口的名字;
value—滑动条初始值;
count—滑动条最大值,值得注意的是滑动条的最小值总为0;
onChange—回调函数名;
userdata—如果用户想传一些自定义的数据给回调函数,可以放在userdata中。
回调函数的格式要求如下:
- void onChangeTrackBar(int pos, void * data)
- {
- .......
- }
复制代码
第一个参数pos为滑动条的当前位置;
第二个参数为函数createTrackbar()中的参数userdata。
C++示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术
//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询
//OpenCV版本 OpenCV3.0
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void onChangeTrackBar(int pos, void * data)
{
Mat A1_copy = *(Mat*)(data);
A1_copy = 0;
A1_copy = A1_copy + pos;
imshow("dyn_gray_value", A1_copy);
}
int main()
{
//创建两行三列的零矩阵
Mat A1 = Mat::zeros(200, 300, CV_8UC1);
namedWindow("dyn_gray_value");
imshow("dyn_gray_value", A1);
int value = 20;
createTrackbar("pos", "dyn_gray_value", & value, 255, onChangeTrackBar, &A1);
waitKey();
return(0);
return(0);
}
该代码通过滑动条调整图像的灰度值。
代码运行结果如下:

可以拉动滑动条调整图像的灰度值,比如把滑动条的值拖动到143的结果如下:

Python示例代码如下:
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询
# OpenCV的版本为4.4.0
import cv2 as cv
import numpy as np
def on_change_trackbar(x):
global A1_copy, value
A1_copy[:, :] = 0
value = cv.getTrackbarPos('pos', 'dyn_gray_value')
A1_copy = A1_copy + value
cv.imshow("dyn_gray_value", A1_copy)
A1 = np.zeros((200, 300), dtype='uint8')
cv.namedWindow('dyn_gray_value')
cv.imshow("dyn_gray_value", A1)
value = 20
A1_copy = A1.copy()
cv.createTrackbar('pos', 'dyn_gray_value', value, 255, on_change_trackbar)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果和C++版的代码一模一样,这里就不贴运行结果了。 |