OpenCV高级图形用户界面(1)创建滑动条函数createTrackbar()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

创建一个滑动条并将其附加到指定的窗口。

该函数 createTrackbar 创建一个具有指定名称和范围的滑动条(滑块或范围控制),将变量 value 分配为与滑动条位置同步的位置,并指定回调函数 onChange 在滑动条位置改变时被调用。创建的滑动条将显示在指定的窗口 winname 中。

cv::createTrackbar() 函数用于在 OpenCV 的窗口中创建一个滑动条(trackbar),可以用来调整一些参数,并实时反映在图像处理的效果中。

注释

仅 Qt 后端\] 如果滑动条应附加到控制面板,则 `winname` 可以为空。 点击每个滑动条的标签可以手动编辑滑动条的值。 ### 函数原型 ```cpp 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 指向每次滑块位置改变时将被调用的函数的指针。此函数应该原型化为 `void Foo(int, void*);`,其中第一个参数是滑块的位置,第二个参数是用户数据(参见下一个参数)。如果回调是指向 `NULL` 的指针,则不调用回调,但只会更新 `value`。 * 参数userdata 作为参数原样传递给回调的用户数据。它可以用来在不使用全局变量的情况下处理滑块事件。 ### 返回值 返回一个整数值,表示操作的结果或状态。具体含义取决于 OpenCV 实现。 ### 代码示例: ```cpp #include #include // 回调函数 void onTrackbarSlide( int pos, void* userData ) { cv::Mat img = *( cv::Mat* )userData; cv::Mat thresholdImg; cv::threshold( img, thresholdImg, pos, 255, cv::THRESH_BINARY ); cv::imshow( "Threshold Image", thresholdImg ); } int main() { // 加载图像 cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_GRAYSCALE ); if ( img.empty() ) { std::cerr << "Error: Image not found!" << std::endl; return -1; } // 创建窗口 cv::namedWindow( "Threshold Image" ); // 创建滑动条 int thresholdValue = 128; int result = cv::createTrackbar( "Threshold Value", "Threshold Image", &thresholdValue, 255, onTrackbarSlide, &img ); if ( result < 0 ) { std::cerr << "Failed to create trackbar." << std::endl; return -1; } // 初始显示 cv::Mat thresholdImg; cv::threshold( img, thresholdImg, thresholdValue, 255, cv::THRESH_BINARY ); cv::imshow( "Threshold Image", thresholdImg ); // 主循环 while ( true ) { int key = cv::waitKey( 1 ); if ( key == 27 ) { // ESC 键 break; } } // 释放资源 cv::destroyAllWindows(); return 0; } ``` ### 运行结果 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3ed7bfdec6a045d587b6f6350e486ea7.png)

相关推荐
Narutolxy34 分钟前
大模型数据分析破局之路20250512
人工智能·chatgpt·数据分析
浊酒南街35 分钟前
TensorFlow中数据集的创建
人工智能·tensorflow
2301_787552872 小时前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
layneyao2 小时前
AI与自然语言处理(NLP):从BERT到GPT的演进
人工智能·自然语言处理·bert
jndingxin3 小时前
OpenCV 的 CUDA 模块中用于将多个单通道的 GpuMat 图像合并成一个多通道的图像 函数cv::cuda::merge
人工智能·opencv·计算机视觉
格林威3 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
灬0灬灬0灬4 小时前
深度学习---常用优化器
人工智能·深度学习
_Itachi__4 小时前
Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用
人工智能·pytorch·python
白光白光5 小时前
大语言模型训练的两个阶段
人工智能·机器学习·语言模型
巷9555 小时前
OpenCV图像金字塔详解:原理、实现与应用
人工智能·opencv·计算机视觉