-
Notifications
You must be signed in to change notification settings - Fork 0
/
mainwindow.cpp
97 lines (87 loc) · 2.92 KB
/
mainwindow.cpp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "converter.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::setSlider()
{
ui->horizontalSlider->setMinimum(0);
ui->horizontalSlider->setMaximum(cap.get(cv::CAP_PROP_FRAME_COUNT));
}
void MainWindow::timer_tick()
{
cap.read(frameColor);
if(frameColor.empty()){
cap.set(cv::CAP_PROP_POS_FRAMES, 0);
cap.read(frameColor);
}
int pos = cap.get(cv::CAP_PROP_POS_FRAMES);
ui->horizontalSlider->setSliderPosition(pos);
cv::Mat frameHSI;
cv::Mat frameThreshold;
cv::Mat frameSubtractedF;
cv::Mat frameSubtractedL;
cv::Mat frameSubtracted;
cv::Mat res;
cv::subtract(frameColor, firstFrameColor, frameSubtractedF);
cv::subtract(frameColor, lastFrameColor, frameSubtractedL);
cv::subtract(frameSubtractedF, frameSubtractedL, frameSubtracted);
mycv::Converter::cvtColor(frameSubtracted, frameHSI, mycv::COLOR_BGR2HSI);
mycv::Converter::flameDetection(frameSubtracted, frameHSI, frameThreshold);
cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(13, 13), cv::Point(6, 6));
cv::dilate(frameThreshold, frameThreshold, element);
cv::bitwise_and(frameColor, frameColor, res, frameThreshold);
lastFrameColor = frameColor.clone();
cv::Size size = cv::Size(700, 500);
cv::resize(res, res, size, cv::INTER_AREA);
QImage image = QImage(res.data, res.cols, res.rows, QImage::Format_BGR888);
QImage image2 = QImage(frameColor.data, frameColor.cols, frameColor.rows, QImage::Format_BGR888);
ui->label->setPixmap(QPixmap::fromImage(image));
ui->label_2->setPixmap(QPixmap::fromImage(image2));
ui->label_2->setScaledContents(true);
}
void MainWindow::on_playButton_clicked()
{
if(frameColor.empty())
return;
if(timer->isActive())
{
timer->stop();
ui->playButton->setText("Play");
}
else
{
timer->start(1000/fps);
ui->playButton->setText("Stop");
}
}
void MainWindow::on_horizontalSlider_valueChanged(int value)
{
cap.set(cv::CAP_PROP_POS_FRAMES, value);
cap.read(frameColor);
}
void MainWindow::on_actionOpenFile_triggered()
{
filename = QFileDialog::getOpenFileName(this, "Select one file to open", "C:\\", "Video (*.avi)");
if(filename == "")
return;
cap = cv::VideoCapture(filename.toStdString());
fps = cap.get(cv::CAP_PROP_FPS);
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &MainWindow::timer_tick);
setSlider();
cap.read(frameColor);
firstFrameColor = frameColor.clone();
lastFrameColor = frameColor.clone();
QImage image2 = QImage(frameColor.data, frameColor.cols, frameColor.rows, QImage::Format_BGR888);
ui->label_2->setPixmap(QPixmap::fromImage(image2));
ui->label_2->setScaledContents(true);
}