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)

相关推荐
六行神算API-天璇2 小时前
技术实践:用大模型平台重构医疗数据分析Pipeline
人工智能·重构·数据挖掘·数据分析
跨境卫士情报站2 小时前
亚马逊格局巨变!AI 助手重构购物逻辑,卖家如何顺势突围?
大数据·人工智能·重构·产品运营·跨境电商·防关联
机器之心2 小时前
国产芯片也能跑AI视频实时生成了,商汤Seko 2.0揭秘幕后黑科技
人工智能·openai
hoiii1872 小时前
使用RPCA算法对图像进行稀疏低秩分解
人工智能·算法
Small___ming2 小时前
【人工智能数学基础】标准贝叶斯公式的一般化推导:从单一条件到任意多条件
人工智能·机器学习·概率论
世优科技虚拟人2 小时前
智慧政务从试点到普及:AI数字人一体机在政务大厅的深度应用分析
人工智能·大模型·智慧城市·数字人·政务·智慧政务·智能交互
一点一木2 小时前
🎙️ 2025 年主流 AI 语音输入工具测评:解锁高效生产力的关键
人工智能
JoannaJuanCV2 小时前
自动驾驶—CARLA仿真(10)tutorial_gbuffer demo
人工智能·机器学习·自动驾驶·carla
测试人社区-小明2 小时前
未来测试岗位的AI需求分析
人工智能·opencv·测试工具·算法·金融·机器人·需求分析
大千AI助手2 小时前
GPT-Neo:开源大型自回归语言模型的实现与影响
人工智能·gpt·机器学习·开源·大模型·大千ai助手·gpt-neo