OpenCV4入门系列教程23:Qt格式的按钮

索引地址:系列教程索引地址

上一篇:OpenCV4入门系列教程22:鼠标操作

OpenCV默认gui界面的按钮就是Qt格式的,如果是自己编译需要提前安装qt。

函数原型:

1
2
3
4
5
6
int cv::createButton (  const String & bar_name,
ButtonCallback on_change,
void * userdata = 0,
int type = QT_PUSH_BUTTON,
bool initial_button_state = false
);

参数说明:

  • 第一个参数是按钮的名称
  • 第二个参数是按钮对应的回调函数
  • 第三个参数是传递给回调函数的数据
  • 第四个参数是按钮类型:复选框、单选框等等
  • 最后一个参数是按钮的状态,比如说单选框是否选中

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <sstream>
#include <string>
using namespace std;

// OpenCV includes
#include "opencv2/opencv.hpp"
using namespace cv;

Mat img;
bool applyGray = false;
bool applyBlur = false;
bool applySobel = false;

void applyFilters() {
Mat result;
img.copyTo(result);
if (applyGray) {
cvtColor(result, result, COLOR_BGR2GRAY);
}
if (applyBlur) {
blur(result, result, Size(5, 5));
}
if (applySobel) {
Sobel(result, result, CV_8U, 1, 1);
}
imshow("Lena", result);
}

void grayCallback(int state, void *userData) {
applyGray = true;
applyFilters();
}
void bgrCallback(int state, void *userData) {
applyGray = false;
applyFilters();
}

void blurCallback(int state, void *userData) {
applyBlur = (bool)state;
applyFilters();
}

void sobelCallback(int state, void *userData) {
applySobel = !applySobel;
applyFilters();
}

int main(int argc, const char **argv) {
img = imread("lena.jpg");
namedWindow("Lena");
//imshow("Lena",img);

//创建按钮
createButton("Blur", blurCallback, NULL, QT_CHECKBOX, 0);
createButton("Gray", grayCallback, NULL, QT_RADIOBOX, 0);
createButton("RGB", bgrCallback, NULL, QT_RADIOBOX, 1);
createButton("Sobel", sobelCallback, NULL, QT_PUSH_BUTTON, 0);

waitKey(0);//等待

return 0;
}

测试结果:

button

下一篇:OpenCV4入门系列教程24:OpenGL界面