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)

相关推荐
阿坡RPA7 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
用户27784491049937 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心7 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
算AI9 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
凯子坚持 c10 小时前
基于飞桨框架3.0本地DeepSeek-R1蒸馏版部署实战
人工智能·paddlepaddle
你觉得20510 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
8K超高清11 小时前
中国8K摄像机:科技赋能文化传承新图景
大数据·人工智能·科技·物联网·智能硬件
hyshhhh11 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
薛定谔的猫-菜鸟程序员11 小时前
零基础玩转深度神经网络大模型:从Hello World到AI炼金术-详解版(含:Conda 全面使用指南)
人工智能·神经网络·dnn
币之互联万物11 小时前
2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点
人工智能·科技