

1 #include<opencv2/opencv.hpp> // opencv头文件
2
3 QT_BEGIN_NAMESPACE
4 namespace Ui { class MainWindow; }
5 QT_END_NAMESPACE
6
7 class MainWindow : public QMainWindow
8 {
9 Q_OBJECT
10
11 public:
12 MainWindow(QWidget *parent = nullptr);
13 ~MainWindow();
14 private:
15 void init();
16 void setQImage();
17
18 private slots:
19 void moveScrollBar();
20
21 private:
22 Ui::MainWindow *ui;
23
24 QImage img;
25 int hmin = 0, smin = 0, vmin = 0;
26 int hmax = 180, smax = 255, vmax = 255;
27 cv::Mat imgMat; // 原图
28 cv::Mat hsvImg; // hsv图
29 };
1 using namespace cv;
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 , ui(new Ui::MainWindow)
6 {
7 ui->setupUi(this);
8
9 imgMat = imread("car1.jpg"); // 原图
10 cvtColor(imgMat, hsvImg, COLOR_BGR2HSV); // hsv相对rgb比较容易处理
11
12 init();
13 setQImage();
14
15 ui->label->setPixmap(QPixmap::fromImage(img));
16 }
17
18 MainWindow::~MainWindow()
19 {
20 delete ui;
21 }
22
23 void MainWindow::init()
24 {
25 this->resize(1200, 500);
26 ui->hminScorllBar->setRange(0, 179);
27 ui->hmaxScorllBar->setRange(0,179); // H是180°
28 ui->sminScorllBar->setRange(0, 255);
29 ui->smaxScorllBar->setRange(0, 255);
30 ui->vminScorllBar->setRange(0, 255);
31 ui->vmaxScorllBar->setRange(0, 255);
32
33 ui->hminScorllBar->setValue(0);
34 ui->hmaxScorllBar->setValue(179); // H是180°
35 ui->sminScorllBar->setValue(0);
36 ui->smaxScorllBar->setValue(255);
37 ui->vminScorllBar->setValue(0);
38 ui->vmaxScorllBar->setValue(255);
39
40 QVector<QScrollBar*> scrollBarList;
41 scrollBarList.append(ui->hminScorllBar);
42 scrollBarList.append(ui->hmaxScorllBar);
43 scrollBarList.append(ui->sminScorllBar);
44 scrollBarList.append(ui->smaxScorllBar);
45 scrollBarList.append(ui->vminScorllBar);
46 scrollBarList.append(ui->vmaxScorllBar);
47
48 QVector<QLabel*> labelList;
49 labelList.append(ui->hminVal);
50 labelList.append(ui->hmaxVal);
51 labelList.append(ui->sminVal);
52 labelList.append(ui->smaxVal);
53 labelList.append(ui->vminVal);
54 labelList.append(ui->vmaxVal);
55
56
57 for (int i = 0; i < scrollBarList.size(); i++)
58 {
59 connect(scrollBarList.at(i), &QScrollBar::valueChanged,
60 this, &MainWindow::moveScrollBar);
61 connect(scrollBarList.at(i), &QScrollBar::valueChanged,
62 labelList.at(i), static_cast<void(QLabel::*)(int)>(&QLabel::setNum));
63 }
64 }
65
66 void MainWindow::setQImage()
67 {
68 if(hsvImg.channels() == 3)
69 {
70 img = QImage((const uchar*)hsvImg.data,
71 hsvImg.cols, hsvImg.rows,
72 hsvImg.cols*hsvImg.channels(),
73 QImage::Format_BGR888); // Opencv是BGR通道
74 }
75 else
76 {
77 img = QImage((const uchar*)hsvImg.data,
78 hsvImg.cols, hsvImg.rows,
79 hsvImg.cols*hsvImg.channels(),
80 QImage::Format_Grayscale8);
81 }
82 }
83
84 void MainWindow::moveScrollBar()
85 {
86 Scalar lower(ui->hminScorllBar->value(),
87 ui->sminScorllBar->value(),
88 ui->vminScorllBar->value());
89 Scalar upper(ui->hmaxScorllBar->value(),
90 ui->smaxScorllBar->value(),
91 ui->vmaxScorllBar->value());
92 inRange(imgMat, lower, upper, hsvImg);
93 setQImage();
94 ui->label->setPixmap(QPixmap::fromImage(img));
95 }