opencv中使用createTrackbar函数来进行滚动条的操作,createTrackbar函数创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便。函数原型:

 int createTrackbar(conststring& trackbarname, conststring& winname,int* value, int count, TrackbarCallback onChange=0,void* userdata=0); 

第一个参数,const string&类型的trackbarname,表示轨迹条的名字,用来代表创建的轨迹条。
第二个参数,const string&类型的winname,填窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的某一个窗口名。
第三个参数,int* 类型的value,一个指向整型的指针,表示滑块的位置。并且在创建时,滑块的初始位置就是是由该变量当前的值。
第四个参数,int类型的count,表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。
第五个参数,TrackbarCallback类型的onChange,首先注意他有默认值0。这是一个指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据(看下面的第六个参数)。如果回调是NULL指针,表示没有回调函数的调用,仅第三个参数value有变化。
第六个参数,void*类型的userdata,他也有默认值0。这个参数是用户传给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value实参是全局变量的话,完全可以不去管这个userdata参数。
createTrackbar函数可以创建一个具有特定名称和范围的轨迹条(Trackbar,或者说是滑块范围控制工具),指定一个和轨迹条位置同步的变量。而且要指定回调函数onChange(第五个参数),在轨迹条位置改变的时候来调用这个回调函数。创建的轨迹条显示在指定的winname(第二个参数)所代表的窗口上。

实例1:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;#define WINDOW_NAME "Mixed Images"// 全局变量声明
const int g_nMaxAlphaValue = 100; // maximun alpha value
int g_nAlphaValueSlider; // value from trackbar
double g_dAlphaValue;
double g_dBetaValue;Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;//滚动条声明
void on_Trackbar( int, void* )
{g_dAlphaValue = (double) g_nAlphaValueSlider/g_nMaxAlphaValue;g_dBetaValue = (1.0-g_dAlphaValue);  //将两幅图像叠加在一起,两幅图像需要同样的类型和尺寸  addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);    imshow(WINDOW_NAME, g_dstImage);
}int main( int argc, char** argv )
{g_srcImage1 = imread("E://IM_VIDEO//kobe.jpg");g_srcImage2 = imread("E://IM_VIDEO//tim.jpg");// NOTE: two image should be the same sizeif(!g_srcImage1.data){printf("Error getting the first images. Put the image wuliEddie1.jpeg to Debug folder. \n");return -1;}if(!g_srcImage1.data){printf("Error getting the second images. Put the image wuliShishi1.jpeg to Debug folder. \n");return -1;}// initialize trackbar valueg_nAlphaValueSlider = 70;    // create windownamedWindow(WINDOW_NAME, 1);// create trackbarchar TrackbarName[50];sprintf( TrackbarName, "Alpha Value %d", g_nMaxAlphaValue );createTrackbar( TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar );on_Trackbar(g_nAlphaValueSlider, 0);waitKey(0);return 0;
}

实例2:

#include <iostream>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;  // Global variables
int threshold_value = 0;
int threshold_type = 3;;
int const max_value = 255;
int const max_type = 4;
int const max_BINARY_value = 255;  Mat src, src_gray, dst;
const char* window_name = "Threshold Demo";
const char* trackbar_type = "Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted";
const char* trackbar_value = "Value";  void Threshold_Demo( int, void* );  int main( int, char** argv )
{   src = imread("E://IM_VIDEO//kobe.jpg");  // Convert the image to Gray  cvtColor( src, src_gray, CV_RGB2GRAY );  // Create a window to display results  namedWindow( window_name, CV_WINDOW_NORMAL );  /// Create Trackbar to choose type of Threshold  createTrackbar( trackbar_type,  window_name, &threshold_type,  max_type, Threshold_Demo );  Threshold_Demo( 0, 0 );  //Wait until user finishes program  for(;;)  {  int c;  c = waitKey( 20 );  if( (char)c == 27 )  { break; }  }  }  void Threshold_Demo( int, void* )
{  threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );  imshow( window_name, dst );
}  

参考:

http://lib.csdn.net/article/opencv/28573

http://blog.csdn.net/a429051366/article/details/42491589

opencv中滚动条操作相关推荐

  1. OpenCV中视频操作及人脸识别案例

    目录 OpenCV中视频操作及人脸识别案例 视频操作 视频读写 从文件中读取视频并播放 保存视频 小结 视频追踪 meanshift Camshift 算法总结 小结 案例:人脸案例 人脸识别基础 实 ...

  2. opencv中直方图操作

    直方图 1 灰度直方图 1.1 原理 直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中.其中, bin为直方图中经常用到的一个概念,可以译为"直条&quo ...

  3. OpenCV中阈值操作

    阈值分割,顾名思义,就是对图像的像素点和选中的阈值进行比对的图像分割方法,在OpenCV 2.X中,Threshold()函数(基本阈值操作)和adaptiveThreshold()函数(自适应阈值操 ...

  4. OpenCV中图像形态学操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 图像形态学是图像处理的分支学科,在二值图像处理 ...

  5. OpenCV中感兴趣区域的选取与检测(一)

    1.感兴趣区域的选取 感兴趣区域(Region of Interest, ROI)的选取,一般有两种情形:1)已知ROI在图像中的位置:2)ROI在图像中的位置未知. 1)第一种情形 很简单,根据RO ...

  6. Python OpenCV 图片模糊操作 blur 与 medianBlur

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧. Python OpenCV 基础知识铺垫 函数原型介绍 均值模糊 中值模糊 2D 卷积(图像滤波),自定义模糊 橡皮擦的小 ...

  7. Opencv中三种操作像素的方法

    测试环境:opencv3.1.0 + Visual Studio 2015 + win7 64位 opencv中有3中方法可以访问/修改图像的像素值,分别为: 1.      指针访问 2.      ...

  8. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作

    数字图像处理其实就是处理二维矩阵数据.利用opencv来学习处理算法是一种比较好的方式.学习opencv,主要就是调用其中的图像处理函数来实现各种操作.如果要得到想要的处理结果,还需要对图像处理算法有 ...

  9. 二值图像分析:OpenCV中的二值化阈值操作

    二值图像分析:OpenCV中的二值化阈值操作 1.二值图像的定义 2.OpenCV中的基本阈值操作 3.OTSU二值寻找算法 3.1 OTSU二值寻找算法介绍 3.2 OTSU二值寻找算法分析 3.2 ...

  10. OpenCV中的saturate操作(饱和操作)究竟是怎么回事?

    OpenCV中的saturate操作(饱和操作)究竟是怎么回事? OpenCV会对一些运算结果作饱和操作,那么什么是饱和操作呢? 用实际例子试一下就知道了. 我们用CV_8U类型来试下,CV_8U的数 ...

最新文章

  1. echarts 坐标自适应_echarts 同一页面,多个图表 页面大小自适应
  2. git在公司内部的使用实践(转)
  3. CCNA培训课总结笔记--配置OSPF实验(十一)
  4. 第10章 序列的修改、散列和切片
  5. java验证码(采用struts2实现)转
  6. 训练技巧 | 功守道:NLP中的对抗训练 + PyTorch实现
  7. 《计算机组成原理》课程设计任务书——TEC-2实验系统——微程序设计
  8. c语言编程题2^0+2^1+……+2e63,牛客网刷题33(2道题)
  9. KMP算法的一个C++实现
  10. 永久居家办公,你愿意吗?
  11. 大学生使用计算机趋势英语作文,学习使用电脑StudentUseofComputers
  12. 基于单片机的倒车雷达/超声波测距系统设计(#0510)
  13. 十款最好用的远程桌面工具
  14. 中国最具声望16所大学,国际排名逐个数~
  15. 应对微软黑屏的解决办法
  16. 后端自我介绍_java开发自我介绍3篇
  17. ARIMA模型实例讲解:时间序列预测需要多少历史数据?
  18. Linux基础第一课——基础知识了解
  19. MyBatis 的级联查询
  20. 使用antV-G6在angualr中画树形关系图

热门文章

  1. PHP—通过HTML网页请求,PHP页面显示源码不能解析
  2. java String 详解
  3. 利用第三方库XML解析 (TBXML)转化成模型数据
  4. tcp/ip通信第5期之客户机端程序
  5. Android客户端和服务器端数据交互的第一种方法
  6. etc profile 的使用
  7. 使用actuator优雅地停止SpringBoot应用
  8. jQuery实现彩色云标签
  9. 硬盘空间分析工具 WizTree(转载)
  10. Hibernate之复合主键映射