【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


相关文章
|
6月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
207 7
|
23天前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
198 3
|
5月前
|
算法 开发工具 计算机视觉
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
75 1
|
2月前
|
存储 计算机视觉 C++
在C++中实现Armadillo库与OpenCV库之间的数据格式转换
在C++中实现Armadillo库与OpenCV库之间的数据格式转换是一项常见且实用的技能。上述步骤提供了一种标准的方法来进行这种转换,可以帮助开发者在两个库之间高效地转移和处理数据。虽然转换过程相对直接,但开发者应留意数据类型匹配和性能优化等关键细节。
58 11
|
2月前
|
存储 计算机视觉 C++
在C++中实现Armadillo库与OpenCV库之间的数据格式转换
在C++中实现Armadillo库与OpenCV库之间的数据格式转换是一项常见且实用的技能。上述步骤提供了一种标准的方法来进行这种转换,可以帮助开发者在两个库之间高效地转移和处理数据。虽然转换过程相对直接,但开发者应留意数据类型匹配和性能优化等关键细节。
22 3
|
3月前
|
算法
OpenCV-Python】滑动条Trackbar的创建和使用(createTrackbar())
该文章介绍了如何在OpenCV-Python中创建和使用滑动条(Trackbar)来动态调节参数,并通过实际代码示例演示了如何通过滑动条控制图像颜色。
|
3月前
|
计算机视觉
OpenCV滑动条(createTrackbar()函数)如何在多个维度进行同步调整?
这篇文章介绍了如何在OpenCV中使用`createTrackbar()`函数创建多个滑动条以同步调整图像的多个维度(如亮度和对比度),通过将不同滑动条的回调函数合并为一个,确保它们在同一图像基础上进行调整。
|
5月前
|
计算机视觉 C++
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
47 0
|
6月前
|
人工智能 机器人 Linux
【C++】Linux下如何查看opencv的版本
【C++】Linux下如何查看opencv的版本
153 0
|
6月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
279 0