【OpenCV • c++】滑动条的创建和使用

简介: 【OpenCV • c++】滑动条的创建和使用

什么是滑动条


 滑动条是 OpenCV 动态调节参数特别好用的工具,它依附于窗口而存在。


创建滑动条


 在 OpenCV 中,可以使用createTrackbar函数来创建一个可以调整数值的滑动条,并将滑动条附加到指定的窗口上。


参考代码


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

 其中,trackbarname表示我们创建的滑动条的名字。winname表示这个滑动条吸附在的窗口的名字。value表示滑块的位置,在创建时,滑块的初始位置就是该变量的值。count表示滑块可以到达的最大值,最小值始终为 0。onChange表示指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。回调的类型为void xx(int, void*),其中第一个参数表示轨迹条的位置,第二个参数表示用户数据userdata。userdate表示传给回调函数的用户数据。

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
#include<opencv2/imgproc.hpp> 
#include<iostream>
using namespace std;
using namespace cv;
Mat image, srcImage;
int thresholds = 50;
void threshold_track(int, void*) {
  Mat result;
  threshold(srcImage, result, thresholds, 255, THRESH_BINARY);
  //Canny(srcImage, result, thresholds, thresholds * 3, 3);
  imshow("边缘检测", result);
}
int main() {
  image = cv::imread("...cc.png");
  if (!image.data)
    return 1;
  cvtColor(image, srcImage, COLOR_BGR2GRAY);
  namedWindow("边缘检测", WINDOW_AUTOSIZE);
  createTrackbar("阈值", "边缘检测", &thresholds, 300, threshold_track);
  waitKey(0);
  return 0;
}

c56a779e8b447595ca23763adad2607a_b91321a6deb04a128ffbd5bead4df04f.png

91fdf9848eab711fab805f3a42e1b0b4_7d68bfceb970429b983e075384f19817.png

3e7e089cd1c8844655abedfcd272273a_78b477d8a3144739873b3c059f8247b9.png

c18d886d09ae2931b462c47234036cc2_b716751f4ef242e296d5100564d9813b.png


获取当前滑动条位置


  在 OpenCV 中,可以使用getTrackbarPos()函数来获取当前滑动条的位置。


参考代码


int getTrackbarPos(const string& trackbarname, const string& winname);

 其中第一个参数表示滑动条的名字,第二个参数表示轨迹条的父窗口的名称。

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
#include<opencv2/imgproc.hpp> 
#include<iostream>
using namespace std;
using namespace cv;
Mat image, srcImage;
int thresholds = 50;
void threshold_track(int, void*) {
  Mat result;
  threshold(srcImage, result, thresholds, 255, THRESH_BINARY);
  cout << "阈值:" << getTrackbarPos("阈值", "边缘检测") << endl;
  imshow("边缘检测", result);
}
int main() {
  image = cv::imread("C://Users//86173//Desktop//cc.png");
  if (!image.data)
    return 1;
  cvtColor(image, srcImage, COLOR_BGR2GRAY);
  namedWindow("边缘检测", WINDOW_AUTOSIZE);
  createTrackbar("阈值", "边缘检测", &thresholds, 300, threshold_track);
  waitKey(0);
  return 0;
}

31c2c7cfdbc3623f287bd7af8c4f46d1_bc909239572c40c18aeb427f21e8297b.png


相关文章
|
20天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
43 6
|
2月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
|
24天前
|
人工智能 机器人 Linux
【C++】Linux下如何查看opencv的版本
【C++】Linux下如何查看opencv的版本
|
2月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
|
2月前
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
|
2月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
|
2月前
|
存储 计算机视觉 C++
Opencv(C++)学习系列---特征点检测和匹配
Opencv(C++)学习系列---特征点检测和匹配
|
2月前
|
算法 测试技术 计算机视觉
Opencv(C++)系列学习---opencv_contrib安装
Opencv(C++)系列学习---opencv_contrib安装
|
2月前
|
C++ 计算机视觉
Opencv(C++)系列学习---读取视频文件和打开摄像头
Opencv(C++)系列学习---读取视频文件和打开摄像头
|
2月前
|
存储 计算机视觉 C++
Opencv (C++)系列学习---模板匹配
Opencv (C++)系列学习---模板匹配