目录
1 概念讲解及用处
图像窗口滑动条是一种用户界面元素,可以用于在图像窗口中添加可调节的滑动条。滑动条通常用于调整参数或显示数值,并与回调函数关联,当滑动条的数值发生变化时触发相应的事件处理。
图像窗口滑动条具有以下几个用途:
调节参数:通过滑动条可以方便地调节算法或图像处理过程中的各种参数,如阈值、卷积核大小等。
实时交互:滑动条可以提供实时反馈,即时显示参数变化对图像的影响,使用户能够直观地了解不同参数设置的效果。
用户定制:滑动条可以让用户根据自己的需求调整参数,实现个性化的图像处理和交互体验。
2 函数详解
OpenCV中使用cv::createTrackbar()函数来创建图像窗口滑动条。
该函数的原型如下:
void createTrackbar(const String& trackbarname, const String& winname,
int* value, int count,
TrackbarCallback onChange = 0,
void* userdata = 0);
参数说明:
trackbarname:滑动条的名称。
winname:图像窗口的名称。
value:指向整数变量的指针,用于存储滑动条的当前数值。
count:滑动条的最大值。
onChange:可选参数,滑动条数值变化时的回调函数。
userdata:可选参数,指向用户数据的指针,可以在回调函数中使用。
3 用C++编写代码进行实现
以下是一个示例代码,演示了如何使用OpenCV在图像窗口中添加滑动条并改变二值化的阈值:
#include <opencv2/opencv.hpp>
cv::Mat src, src_gray, binary;
int threshold_value = 127;
int max_threshold = 255;
void onThresholdChange(int, void*) {
cv::threshold(src_gray, binary, threshold_value, max_threshold, cv::THRESH_BINARY);
cv::imshow("Binary", binary);
}
int main() {
// 读取图像
src = cv::imread("image.jpg", cv::IMREAD_COLOR);
// 转为灰度图像
cv::cvtColor(src, src_gray, cv::COLOR_BGR2GRAY);
// 创建窗口
cv::namedWindow("Binary");
// 创建滑动条
cv::createTrackbar("Threshold", "Binary", &threshold_value, max_threshold, onThresholdChange);
// 初始化二值化图像
cv::threshold(src_gray, binary, threshold_value, max_threshold, cv::THRESH_BINARY);
// 显示二值化结果
cv::imshow("Binary", binary);
while (true) {
int key = cv::waitKey(1);
if (key == 27) { // 按下ESC键退出循环
break;
}
}
cv::destroyAllWindows();
return 0;
}
在这段代码中,我们首先包含了OpenCV的头文件,并定义了全局变量 src(原始图像)、src_gray(灰度图像)和 binary(二值化图像)。然后,我们定义了 onThresholdChange 函数作为滑动条的回调函数,该函数在滑动条值变化时会被调用,根据新的阈值对图像进行二值化,并实时显示结果。
在主函数中,我们读取图像文件并将其转换为灰度图像。然后,创建一个名为 "Binary" 的窗口,并使用 createTrackbar 函数创建一个名为 "Threshold" 的滑动条,并指定回调函数 onThresholdChange。接下来,初始化二值化图像并显示在窗口中。
最后,通过一个无限循环来等待按键事件,当按下ESC键时,退出循环,关闭窗口。