2 Star 1 Fork 3

王治淇 / 堤坝灾害点检测智能预警系统

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
mainwindow.cpp 56.60 KB
一键复制 编辑 原始数据 按行查看 历史
“王治淇” 提交于 2022-07-07 18:35 . first commit
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolButton>
#include <QApplication>
#include <QSpinBox>
#include <QTextEdit>
#include <QMdiSubWindow>
#include <QLabel>
#include <string>
using namespace std;
#include <iostream>
#include <sstream>
#include <QFontDialog>
#include <QColorDialog>
#include <QFileDialog>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlDatabase>
#include <QDebug>
#include <QTranslator>
#include <QDebug>
#include <QPaintDevice>
#include <QPainter>
#include <QImage>
#include <QtCore/qmath.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
#include <QTimer>
#include "video.h"
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>
#include "opencv2/imgproc/imgproc_c.h"///for cvSmooth
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
, beishu(1)
,delay(0)
{
ui->setupUi(this);
ui->pushButton_3->setDisabled(true);
ui->pushButton_4->setDisabled(true);
//视频
//connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(onBtnClicked()));
connect(&timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
connect(&timer, SIGNAL(timeout()), this, SLOT(updatePosition()));
connect(ui->action_recognition, SIGNAL(clicked(bool)), this, SLOT(on_action_recognition_triggered()));
setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint); // 禁止最大化按钮
setFixedSize(this->width(),this->height()); // 禁止拖动窗口大小
customMsgBox.setWindowTitle(tr("关于本软件"));
customMsgBox.addButton(tr("好的"),QMessageBox::ActionRole);
customMsgBox.setIconPixmap(QPixmap(":/myImage/images/about1.png"));
customMsgBox.setText(tr("欢迎使用《堤坝灾害智能预警系统》!本软件具有简单的图像和视频处理功能。\n"
"图像功能包括多选打开、旋转、镜像、灰度化、均值滤波、"
"边缘检测、原图复合、伽马检测、二值化、色彩调整、亮度调整、对比度调整、饱和度调整等功能。\n"
"包含堤坝渗水点和塌陷处的识别功能。\n"
"视频功能包括暂停、播放、进度条、灰度化、边缘检测、平滑、二值化、局部马赛克、缩放等功能。\n"
"——By wzq"));
ui->statusBar->showMessage(tr("欢迎使用多功能浏览器"),2000);
QLabel *permanent = new QLabel(this);
permanent->setObjectName("status");
permanent->setFrameStyle(QFrame::Box|QFrame::Sunken);
permanent->setText("欢迎使用!");
ui->statusBar->addPermanentWidget(permanent);
ui->tabWidget->setStyleSheet("QTabWidget:pane {border-top:0px;background: transparent; }");
}
MainWindow::~MainWindow()
{
delete ui;
capture.release();
}
void MainWindow::on_action_Dock_triggered()
{
ui->dockWidget->show();
}
void MainWindow::on_action_Open_triggered()
{
QStringList srcDirPathListS = QFileDialog::getOpenFileNames(this, tr("选择图片"), "E:/Qt/qtworks/MainWindow/images", tr("图像文件(*.jpg *.png *.bmp)"));
if(srcDirPathListS.size()>0)
{
ui->tabWidget->setCurrentIndex(0);
}
if(srcDirPathListS.size()>=3){
srcDirPathList =srcDirPathListS;
srcDirPathListS.clear();
index =0;
QString srcDirPath = srcDirPathList.at(index);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
QString src1 = srcDirPathList.at((index+1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
QString src2 = srcDirPathList.at((index+2)%srcDirPathList.size());
QImage image2(src2);
QImage Image2 = ImageCenter(image2,ui->label_other_3);
ui->label_other_3->setPixmap(QPixmap::fromImage(Image2));
ui->label_other_3->setAlignment(Qt::AlignCenter);
ui->pushButton_3->setDisabled(false);
ui->pushButton_4->setDisabled(false);
ui->label_other_1->setVisible(true);
ui->label_other_3->setVisible(true);
}else if(srcDirPathListS.size()==1){
srcDirPathList =srcDirPathListS;
srcDirPathListS.clear();
index =0;
QString srcDirPath = srcDirPathList.at(index);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
//有图片触发事件
//isImage=true;
//qDebug("%d",srcDirPathList.size());
ui->pushButton_3->setDisabled(true);
ui->pushButton_4->setDisabled(true);
ui->label_other_3->setVisible(false);
ui->label_other_1->setVisible(false);
}
else if(srcDirPathListS.size()==2){
srcDirPathList =srcDirPathListS;
srcDirPathListS.clear();
index =0;
QString srcDirPath = srcDirPathList.at(index);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
//有图片触发事件
//isImage=true;
//qDebug("%d",srcDirPathList.size());
QString src1 = srcDirPathList.at((index+1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
ui->pushButton_3->setDisabled(false);
ui->pushButton_4->setDisabled(false);
ui->label_other_1->setVisible(true);
ui->label_other_3->setVisible(false);
}
}
void split(const string& s,vector<int>& sv,const char flag = ' ') {
sv.clear();
istringstream iss(s);
string temp;
while (getline(iss, temp, flag)) {
sv.push_back(stoi(temp));
}
return;
}
//图片居中显示,图片大小与label大小相适应
QImage MainWindow::ImageCenter(QImage qimage,QLabel *qLabel)
{
QImage image;
QSize imageSize = qimage.size();
QSize labelSize = qLabel->size();
double dWidthRatio = 1.0*imageSize.width() / labelSize.width();
double dHeightRatio = 1.0*imageSize.height() / labelSize.height();
if (dWidthRatio>dHeightRatio)
{
image = qimage.scaledToWidth(labelSize.width());
}
else
{
image = qimage.scaledToHeight(labelSize.height());
}
return image;
}
//选择图片
void MainWindow::on_pushButton_clicked()
{
QStringList srcDirPathListS = QFileDialog::getOpenFileNames(this, tr("选择图片"), "E:/Qt/qtworks/MainWindow/images", tr("图像文件(*.jpg *.png *.bmp)"));
if(srcDirPathListS.size()>0)
{
ui->tabWidget->setCurrentIndex(0);
}
if(srcDirPathListS.size()>=3){
srcDirPathList =srcDirPathListS;
srcDirPathListS.clear();
index =0;
QString srcDirPath = srcDirPathList.at(index);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
QString src1 = srcDirPathList.at((index+1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
QString src2 = srcDirPathList.at((index+2)%srcDirPathList.size());
QImage image2(src2);
QImage Image2 = ImageCenter(image2,ui->label_other_3);
ui->label_other_3->setPixmap(QPixmap::fromImage(Image2));
ui->label_other_3->setAlignment(Qt::AlignCenter);
ui->pushButton_3->setDisabled(false);
ui->pushButton_4->setDisabled(false);
ui->label_other_1->setVisible(true);
ui->label_other_3->setVisible(true);
}else if(srcDirPathListS.size()==1){
srcDirPathList =srcDirPathListS;
srcDirPathListS.clear();
index =0;
QString srcDirPath = srcDirPathList.at(index);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
//有图片触发事件
//isImage=true;
//qDebug("%d",srcDirPathList.size());
ui->pushButton_3->setDisabled(true);
ui->pushButton_4->setDisabled(true);
ui->label_other_3->setVisible(false);
ui->label_other_1->setVisible(false);
}
else if(srcDirPathListS.size()==2){
srcDirPathList =srcDirPathListS;
srcDirPathListS.clear();
index =0;
QString srcDirPath = srcDirPathList.at(index);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
//有图片触发事件
//isImage=true;
//qDebug("%d",srcDirPathList.size());
QString src1 = srcDirPathList.at((index+1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
ui->pushButton_3->setDisabled(false);
ui->pushButton_4->setDisabled(false);
ui->label_other_1->setVisible(true);
ui->label_other_3->setVisible(false);
}
}
//上一张
void MainWindow::on_pushButton_3_clicked()
{
if(srcDirPathList.size()>=3)
{
index=qAbs(index+srcDirPathList.size()-1);
int i = index%srcDirPathList.size();
//qDebug("%d",i);
QString srcDirPath = srcDirPathList.at(i);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images3=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images3));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
QString src1 = srcDirPathList.at(qAbs(index+srcDirPathList.size()-1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
QString src2 = srcDirPathList.at(qAbs(index+srcDirPathList.size()-2)%srcDirPathList.size());
QImage image2(src2);
QImage Image2 = ImageCenter(image2,ui->label_other_3);
ui->label_other_3->setPixmap(QPixmap::fromImage(Image2));
ui->label_other_3->setAlignment(Qt::AlignCenter);
}
else if(srcDirPathList.size()==2){
index=qAbs(index+srcDirPathList.size()-1);
int i = index%srcDirPathList.size();
//qDebug("%d",i);
QString srcDirPath = srcDirPathList.at(i);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images3=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images3));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
QString src1 = srcDirPathList.at(qAbs(index+srcDirPathList.size()-1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
}
}
//下一张
void MainWindow::on_pushButton_4_clicked()
{
if(srcDirPathList.size()>=3)
{
index=qAbs(index+1);
int i = index%srcDirPathList.size();
// qDebug("%d",i);
QString srcDirPath = srcDirPathList.at(i);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images1=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images1));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
QString src1 = srcDirPathList.at((index+1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
QString src2 = srcDirPathList.at((index+2)%srcDirPathList.size());
QImage image2(src2);
QImage Image2 = ImageCenter(image2,ui->label_other_3);
ui->label_other_3->setPixmap(QPixmap::fromImage(Image2));
ui->label_other_3->setAlignment(Qt::AlignCenter);
}
else if(srcDirPathList.size()==2){
index=qAbs(index+1);
int i = index%srcDirPathList.size();
QString srcDirPath = srcDirPathList.at(i);
QImage image(srcDirPath);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
origin_path=srcDirPath;
QImage images1=ImageCenter(image,ui->label_other);
ui->label_other->setPixmap(QPixmap::fromImage(images1));
ui->label_other->setAlignment(Qt::AlignCenter);
//状态栏显示图片路径
QLabel *label=ui->statusBar->findChild<QLabel *>("status");
label->setText(srcDirPath);
QString src1 = srcDirPathList.at((index+1)%srcDirPathList.size());
QImage image1(src1);
QImage Image1 = ImageCenter(image1,ui->label_other_1);
ui->label_other_1->setPixmap(QPixmap::fromImage(Image1));
ui->label_other_1->setAlignment(Qt::AlignCenter);
}
}
//保存
void MainWindow::on_action_Save_triggered()
{
if(ui->checkBox->isChecked()){//要加水印
if(ui->label_show->pixmap()!=nullptr){
QImage image2(ui->label_show->pixmap()->toImage());
QImage simage("E:/Qt/qtworks/MainWindow/images/name1.png");
int swidth = simage.width();
int sheight = simage.height();
int r,b,g;
for(int i=0; i<sheight; ++i) {
for(int j=0; j<swidth; ++j) {
QColor oldcolor2=QColor(simage.pixel(j,i));
r=oldcolor2.red();
b=oldcolor2.blue();
g=oldcolor2.green();
if(r==0&&b==0&&g==0)
{
image2.setPixelColor(j,i,qRgb(0,0,0));
}else
{
//image.setPixelColor(j,i,qRgb(red,blue,green));
}
}
}
QString filename = QFileDialog::getSaveFileName(this,
tr("保存图片"),
"E:/Qtworks/MainWindow/images/signed_images.png",
tr("*.png;; *.jpg;; *.bmp;; *.tif;; *.GIF")); //选择路径
if (filename.isEmpty())
{
return;
}
else
{
if (!(image2.save(filename))) //保存图像
{
QMessageBox::information(this,
tr("图片保存成功!"),
tr("图片保存失败!"));
return;
}
ui->statusBar->showMessage("图片保存成功!");
}
}
else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
else //不加水印
{
if(ui->label_show->pixmap()!=nullptr){
QString filename = QFileDialog::getSaveFileName(this,
tr("保存图片"),
"E:/Qtworks/MainWindow/images/images.png",
tr("*.png;; *.jpg;; *.bmp;; *.tif;; *.GIF")); //选择路径
if (filename.isEmpty())
{
return;
}
else
{
if (!(ui->label_show->pixmap()->toImage().save(filename))) //保存图像
{
QMessageBox::information(this,
tr("图片保存成功!"),
tr("图片保存失败!"));
return;
}
ui->statusBar->showMessage("图片保存成功!");
}
}
else
{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
}
//灰度化
QImage MainWindow::gray(QImage image){
QImage newImage =image.convertToFormat(QImage::Format_ARGB32);
QColor oldColor;
for(int y = 0; y < newImage.height(); y++)
{
for(int x = 0; x < newImage.width(); x++)
{
oldColor = QColor(image.pixel(x,y));
int average = (oldColor.red() + oldColor.green() + oldColor.blue()) / 3;
newImage.setPixel(x, y, qRgb(average, average, average));
}
}
return newImage;
}
//灰度化
void MainWindow::on_pushButton_gray_clicked()
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage images=gray(image);
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//均值滤波
QImage MainWindow::junzhi(QImage image){
int kernel [3][3] = {
{1,1,1},
{1,1,1},
{1,1,1}};
int sizeKernel = 3;
int sumKernel = 9;
QColor color;
for(int x = sizeKernel/2;x<image.width() - sizeKernel/2;x++)
{
for(int y= sizeKernel/2;y<image.height() - sizeKernel/2;y++)
{
int r = 0;
int g = 0;
int b = 0;
for(int i = -sizeKernel/2;i<=sizeKernel/2;i++)
{
for(int j = -sizeKernel/2;j<=sizeKernel/2;j++)
{
color = QColor(image.pixel(x+i,y+j));
r+=color.red()*kernel[sizeKernel/2+i][sizeKernel/2+j];
g+=color.green()*kernel[sizeKernel/2+i][sizeKernel/2+j];
b+=color.blue()*kernel[sizeKernel/2+i][sizeKernel/2+j];
}
}
r = qBound(0,r/sumKernel,255);
g = qBound(0,g/sumKernel,255);
b = qBound(0,b/sumKernel,255);
image.setPixel(x,y,qRgb( r,g,b));
}
}
return image;
}
//均值滤波
void MainWindow::on_pushButton_junzhi_clicked()
{
if(origin_path!=nullptr){
QImage image(origin_path);
image=junzhi(image);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//翻译
void MainWindow::on_action_L_triggered()
{
QTranslator translator;
if(language){
translator.load("E:/Qt/qtworks/MainWindow/zh_tr.qm");
}
else
{
translator.load("E:/Qt/qtworks/MainWindow/en_tr.qm");
}
QApplication *qapp;
qapp->installTranslator(&translator);
language=!language;
ui->retranslateUi(this);//重新翻译刷新界面
}
//亮度调节
void MainWindow::on_horizontalSlider_valueChanged(int value)
{
if(origin_path!=nullptr){
QImage image(origin_path);
int red, green, blue;
int pixels = image.width() * image.height();
unsigned int *data = (unsigned int *)image.bits();
for (int i = 0; i < pixels; ++i)
{
red= qRed(data[i])+ value;
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green= qGreen(data[i]) + value;
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue= qBlue(data[i]) + value;
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue ;
data[i] = qRgba(red, green, blue, qAlpha(data[i]));
}
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
ui->label_light->setText(QString::number(value));
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//边缘检测
QImage MainWindow::bianyuan(QImage image){
QImage newImage =image.convertToFormat(QImage::Format_ARGB32);
QColor color0;
QColor color1;
QColor color2;
QColor color3;
int r = 0;
int g = 0;
int b = 0;
int rgb = 0;
int r1 = 0;
int g1 = 0;
int b1 = 0;
int rgb1 = 0;
int a = 0;
for( int y = 0; y < image.height() - 1; y++)
{
for(int x = 0; x < image.width() - 1; x++)
{
color0 = QColor ( image.pixel(x,y));
color1 = QColor ( image.pixel(x + 1,y));
color2 = QColor ( image.pixel(x,y + 1));
color3 = QColor ( image.pixel(x + 1,y + 1));
r = abs(color0.red() - color3.red());
g = abs(color0.green() - color3.green());
b = abs(color0.blue() - color3.blue());
rgb = r + g + b;
r1 = abs(color1.red() - color2.red());
g1= abs(color1.green() - color2.green());
b1 = abs(color1.blue() - color2.blue());
rgb1 = r1 + g1 + b1;
a = rgb + rgb1;
a = a>255?255:a;
newImage.setPixel(x,y,qRgb(a,a,a));
}
}
return newImage;
}
//边缘检测
void MainWindow::on_pushButton_junzhi_2_clicked()
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage newImage =bianyuan(image);
QImage Image=ImageCenter(newImage,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//原图+边缘滤波复合调用函数
QImage MainWindow::fuhe(QImage images){
QImage image2 =images.convertToFormat(QImage::Format_ARGB32);
QColor color0;
QColor color1;
QColor color2;
QColor color3;
int r = 0;
int g = 0;
int b = 0;
int rgb = 0;
int r1 = 0;
int g1 = 0;
int b1 = 0;
int rgb1 = 0;
int a = 0;
for( int y = 0; y < images.height() - 1; y++)
{
for(int x = 0; x < images.width() - 1; x++)
{
color0 = QColor ( images.pixel(x,y));
color1 = QColor ( images.pixel(x + 1,y));
color2 = QColor ( images.pixel(x,y + 1));
color3 = QColor ( images.pixel(x + 1,y + 1));
r = abs(color0.red() - color3.red());
g = abs(color0.green() - color3.green());
b = abs(color0.blue() - color3.blue());
rgb = r + g + b;
r1 = abs(color1.red() - color2.red());
g1= abs(color1.green() - color2.green());
b1 = abs(color1.blue() - color2.blue());
rgb1 = r1 + g1 + b1;
a = rgb + rgb1;
a = a>255?255:a;
image2.setPixel(x,y,qRgb(a,a,a));
}
}
QImage image(origin_path);
int red, green, blue;
int red2,green2,blue2;
int pixels = image.width() * image.height();
unsigned int *data = (unsigned int *)image.bits();
unsigned int *data2 = (unsigned int *)image2.bits();
for (int i = 0; i < pixels; ++i)
{
red= qRed(data[i]);
red2=qRed(data2[i])*0.5+red*0.5;
red2 = (red2 < 0x00) ? 0x00 : (red2 > 0xff) ? 0xff : red2;
green= qGreen(data[i]);
green2= qGreen(data2[i])*0.5+green*0.5;
green2 = (green2 < 0x00) ? 0x00 : (green2 > 0xff) ? 0xff : green2;
blue= qBlue(data[i]);
blue2= qBlue(data2[i])*0.5+blue*0.5;
blue2 = (blue2 < 0x00) ? 0x00 : (blue2 > 0xff) ? 0xff : blue2 ;
data2[i] = qRgba(red2, green2, blue2, qAlpha(data2[i]));
}
return image2;
}
//边缘检测+原图复合
void MainWindow::on_pushButton_junzhi_3_clicked()
{
if(origin_path!=nullptr){
QImage images(origin_path);
QImage image2 =fuhe(images);
QImage Image=ImageCenter(image2,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//更改比例
void MainWindow::on_horizontalSlider_2_valueChanged(int value1)
{
float value=(float)value1/100;
if(origin_path!=nullptr){
QImage images(origin_path);
QImage image2 =images.convertToFormat(QImage::Format_ARGB32);
QColor color0;
QColor color1;
QColor color2;
QColor color3;
int r = 0;
int g = 0;
int b = 0;
int rgb = 0;
int r1 = 0;
int g1 = 0;
int b1 = 0;
int rgb1 = 0;
int a = 0;
for( int y = 0; y < images.height() - 1; y++)
{
for(int x = 0; x < images.width() - 1; x++)
{
color0 = QColor ( images.pixel(x,y));
color1 = QColor ( images.pixel(x + 1,y));
color2 = QColor ( images.pixel(x,y + 1));
color3 = QColor ( images.pixel(x + 1,y + 1));
r = abs(color0.red() - color3.red());
g = abs(color0.green() - color3.green());
b = abs(color0.blue() - color3.blue());
rgb = r + g + b;
r1 = abs(color1.red() - color2.red());
g1= abs(color1.green() - color2.green());
b1 = abs(color1.blue() - color2.blue());
rgb1 = r1 + g1 + b1;
a = rgb + rgb1;
a = a>255?255:a;
image2.setPixel(x,y,qRgb(a,a,a));
}
}
QImage image(origin_path);
// QImage image2(label->pixmap()->toImage());
int red, green, blue;
int red2,green2,blue2;
int pixels = image.width() * image.height();
unsigned int *data = (unsigned int *)image.bits();
unsigned int *data2 = (unsigned int *)image2.bits();
for (int i = 0; i < pixels; ++i)
{
red= qRed(data[i]);
red2=qRed(data2[i])*value+red*(1-value);
red2 = (red2 < 0x00) ? 0x00 : (red2 > 0xff) ? 0xff : red2;
green= qGreen(data[i]);
green2= qGreen(data2[i])*value+green*(1-value);
green2 = (green2 < 0x00) ? 0x00 : (green2 > 0xff) ? 0xff : green2;
blue= qBlue(data[i]);
blue2= qBlue(data2[i])*value+blue*(1-value);
blue2 = (blue2 < 0x00) ? 0x00 : (blue2 > 0xff) ? 0xff : blue2 ;
data2[i] = qRgba(red2, green2, blue2, qAlpha(data2[i]));
}
QImage Image=ImageCenter(image2,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
ui->label_fuhe->setText(QString::number(value).append(":").append(QString::number(1-value)));
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//保存
void MainWindow::on_pushButton_save_clicked()
{
if(ui->checkBox->isChecked()){//要加水印
if(ui->label_show->pixmap()!=nullptr){
QImage image2(ui->label_show->pixmap()->toImage());
QImage simage("D:/code/fx/QT5-Image-and-video-processing-software-master/images/name1.png");
int swidth = simage.width();
int sheight = simage.height();
int r,b,g;
for(int i=0; i<sheight; ++i) {
for(int j=0; j<swidth; ++j) {
QColor oldcolor2=QColor(simage.pixel(j,i));
r=oldcolor2.red();
b=oldcolor2.blue();
g=oldcolor2.green();
if(r==0&&b==0&&g==0)
{
image2.setPixelColor(j,i,qRgb(0,0,0));
}else
{
//image.setPixelColor(j,i,qRgb(red,blue,green));
}
}
}
QString filename = QFileDialog::getSaveFileName(this,
tr("保存图片"),
"E:/Qtworks/MainWindow/images/signed_images.png",
tr("*.png;; *.jpg;; *.bmp;; *.tif;; *.GIF")); //选择路径
if (filename.isEmpty())
{
return;
}
else
{
if (!(image2.save(filename))) //保存图像
{
QMessageBox::information(this,
tr("图片保存成功!"),
tr("图片保存失败!"));
return;
}
ui->statusBar->showMessage("图片保存成功!");
}
}
else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
else //不加水印
{
if(ui->label_show->pixmap()!=nullptr){
QString filename = QFileDialog::getSaveFileName(this,
tr("保存图片"),
"E:/Qtworks/MainWindow/images",
tr("*.png;; *.jpg;; *.bmp;; *.tif;; *.GIF")); //选择路径
if (filename.isEmpty())
{
return;
}
else
{
if (!(ui->label_show->pixmap()->toImage().save(filename))) //保存图像
{
QMessageBox::information(this,
tr("图片保存成功!"),
tr("图片保存失败!"));
return;
}
ui->statusBar->showMessage("图片保存成功!");
}
}else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
}
//改变R值滑动条
void MainWindow::on_horizontalSlider_R_valueChanged(int value)
{
if(ui->label_show->pixmap()!=nullptr){
int value_r=value;
int value_g=ui->horizontalSlider_G->value();
int value_b=ui->horizontalSlider_B->value();
QImage image(origin_path);
QImage images=setRGB(image,value_r,value_g,value_b);
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//调整rgb函数调用
QImage MainWindow::setRGB(QImage image,int value_r, int value_g, int value_b){
int r,g,b;
QColor oldColor;
int height=image.height();
int width=image.width();
for (int i = 0; i < height; ++i)
{
for(int j=0;j<width;++j){
oldColor = QColor(image.pixel(j,i));
r=oldColor.red()+value_r;
if(r>255)
r=255;
g=oldColor.green()+value_g;
if(g>255)
g=255;
b=oldColor.blue()+value_b;
if(b>255)
b=255;
image.setPixel(j,i, qRgb(r, g, b));
}
}
return image;
}
//显示原图按钮
void MainWindow::on_pushButton_origin_clicked()
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//改变g值滑动条
void MainWindow::on_horizontalSlider_G_valueChanged(int value)
{
if(ui->label_show->pixmap()!=nullptr){
int value_r=ui->horizontalSlider_R->value();
int value_g=value;
int value_b=ui->horizontalSlider_B->value();
QImage image(origin_path);
QImage images=setRGB(image,value_r,value_g,value_b);
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//改变b值滑动条
void MainWindow::on_horizontalSlider_B_valueChanged(int value)
{
if(ui->label_show->pixmap()!=nullptr){
int value_r=ui->horizontalSlider_R->value();
int value_g=ui->horizontalSlider_G->value();
int value_b=value;
QImage image(origin_path);
QImage images=setRGB(image,value_r,value_g,value_b);
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
QImage MainWindow::gamma(QImage image){
double d=1.2;
QColor color;
int height = image.height();
int width = image.width();
for (int i=0;i<width;i++){
for(int j=0;j<height;j++){
color = QColor(image.pixel(i,j));
double r = color.red();
double g = color.green();
double b = color.blue();
int R = qBound(0,(int)qPow(r,d),255);
int G = qBound(0,(int)qPow(g,d),255);
int B = qBound(0,(int)qPow(b,d),255);
image.setPixel(i,j,qRgb(R,G,B));
}
}
return image;
}
//伽马变换按钮
void MainWindow::on_pushButton_gamma_clicked()
{
if(origin_path!=nullptr){
QImage image(origin_path);
image=gamma(image);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//二值化滑动条
void MainWindow::on_horizontalSlider_erzhi_valueChanged(int value)
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage images=gray(image);
int height=images.height();
int width=images.width();
int bt;
QColor oldColor;
for (int i = 0; i < height; ++i)
{
for(int j=0;j<width;++j){
oldColor = QColor(images.pixel(j,i));
bt = oldColor.red();
if(bt<value){
bt=0;
}else{
bt=255;
}
images.setPixel(j,i, qRgb(bt, bt, bt));
}
}
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
ui->label_yuzhi->setText(QString::number(value));
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//调整对比度
QImage MainWindow::AdjustContrast(QImage image, int value)
{
int pixels = image.width() * image.height();
unsigned int *data = (unsigned int *)image.bits();
int red, green, blue, nRed, nGreen, nBlue;
if (value > 0 && value < 256)
{
float param = 1 / (1 - value / 256.0) - 1;
for (int i = 0; i < pixels; ++i)
{
nRed = qRed(data[i]);
nGreen = qGreen(data[i]);
nBlue = qBlue(data[i]);
red = nRed + (nRed - 127) * param;
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green = nGreen + (nGreen - 127) * param;
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue = nBlue + (nBlue - 127) * param;
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue;
data[i] = qRgba(red, green, blue, qAlpha(data[i]));
}
}
else
{
for (int i = 0; i < pixels; ++i)
{
nRed = qRed(data[i]);
nGreen = qGreen(data[i]);
nBlue = qBlue(data[i]);
red = nRed + (nRed - 127) * value / 100.0;
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green = nGreen + (nGreen - 127) * value / 100.0;
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue = nBlue + (nBlue - 127) * value / 100.0;
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue;
data[i] = qRgba(red, green, blue, qAlpha(data[i]));
}
}
return image;
}
//对比度滑动条
void MainWindow::on_horizontalSlider_duibi_valueChanged(int value)
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage images=AdjustContrast(image,value);
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//饱和度函数调用
QImage MainWindow::AdjustSaturation(QImage Img, int iSaturateValue)
{
int red, green, blue, nRed, nGreen, nBlue;
int pixels = Img.width() * Img.height();
unsigned int *data = (unsigned int *)Img.bits();
float Increment = iSaturateValue/100.0;
float delta = 0;
float minVal, maxVal;
float L, S;
float alpha;
for (int i = 0; i < pixels; ++i)
{
nRed = qRed(data[i]);
nGreen = qGreen(data[i]);
nBlue = qBlue(data[i]);
minVal = std::min(std::min(nRed, nGreen), nBlue);
maxVal = std::max(std::max(nRed, nGreen), nBlue);
delta = (maxVal - minVal) / 255.0;
L = 0.5*(maxVal + minVal) / 255.0;
S = std::max(0.5*delta / L, 0.5*delta / (1 - L));
if (Increment > 0)
{
alpha = std::max(S, 1 - Increment);
alpha = 1.0 / alpha - 1;
red = nRed + (nRed - L*255.0)*alpha;
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green = nGreen + (nGreen - L*255.0)*alpha;
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue = nBlue + (nBlue - L*255.0)*alpha;
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue;
}
else
{
alpha = Increment;
red = L*255.0 + (nRed - L * 255.0)*(1+alpha);
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green = L*255.0 + (nGreen - L * 255.0)*(1+alpha);
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue = L*255.0 + (nBlue - L * 255.0)*(1+alpha);
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue;
}
data[i] = qRgba(red, green, blue, qAlpha(data[i]));
}
return Img;
}
//饱和度
void MainWindow::on_horizontalSlider_baohe_valueChanged(int value)
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage images=AdjustSaturation(image,value);
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//打开视频
void MainWindow::on_action_V_triggered()
{
QString video_path = QFileDialog::getOpenFileName(this,tr("选择视频"),"E:/Qt/qtworks/MainWindow/images",tr("Video (*.WMV *.mp4 *.rmvb *.flv)"));
if(video_path!=nullptr){
//打开视频文件:其实就是建立一个VideoCapture结构
capture.open(video_path.toStdString());
//检测是否正常打开:成功打开时,isOpened返回ture
if (!capture.isOpened())
QMessageBox::warning(nullptr, "提示", "打开视频失败!", QMessageBox::Yes | QMessageBox::Yes);
//ui->textEdit->append("fail to open!");
ui->tabWidget->setCurrentIndex(1);
ui->pushButton_6->setEnabled(true);
//获取整个帧数
long totalFrameNumber = capture.get(CAP_PROP_FRAME_COUNT);
//ui->textEdit->append(QString::fromLocal8Bit("totally %1 frames").arg(totalFrameNumber));
//ui->label_11->resize(QSize(capture.get(CAP_PROP_FRAME_WIDTH), capture.get(CAP_PROP_FRAME_HEIGHT)));
//设置开始帧()
long frameToStart = 0;
capture.set(CAP_PROP_POS_FRAMES, frameToStart);
//ui->textEdit->append(QString::fromLocal8Bit("from %1 frame").arg(frameToStart));
//获取帧率
double rate = capture.get(CAP_PROP_FPS);
//ui->textEdit->append(QString::fromLocal8Bit("Frame rate: %1 ").arg(rate));
delay = 1000 / rate;
timer.start(delay);
type=0;
//timer.start();
isstart=!isstart;
ui->pushButton_6->setStyleSheet("border-radius:32px;"
"background-image: url(:/myImage/images/stop.png);border:none;") ;
}
}
//进度条随视频移动
void MainWindow::updatePosition(){
long totalFrameNumber = capture.get(CAP_PROP_FRAME_COUNT);
ui->VideohorizontalSlider_2->setMaximum(totalFrameNumber);
long frame=capture.get(CAP_PROP_POS_FRAMES );
ui->VideohorizontalSlider_2->setValue(frame);
}
//秒转分函数
QString MainWindow::stom(int s){
QString m;
if(s/60==0){
m=QString::number (s%60);
}else{
m=QString::number (s/60)+":"+QString::number (s%60);
}
return m;
}
//timer触发函数
void MainWindow::onTimeout()
{
Mat frame;
//读取下一帧
double rate = capture.get(CAP_PROP_FPS);
double nowframe=capture.get(CAP_PROP_POS_FRAMES );
int nows=nowframe/rate;
cout<<"nows:"<<nows<<endl;
long totalFrameNumber = capture.get(CAP_PROP_FRAME_COUNT);
int totals=totalFrameNumber/rate;
cout<<"totals:"<<totals<<endl;
ui->label_12->setText(stom(nows)+"/"+stom(totals));
if (!capture.read(frame))
{
//ui->textEdit->append(QString::fromLocal8Bit("fail to load video"));
return;
}
if(type==1){
//image=gray2(image);
cvtColor(frame,frame,CV_BGR2GRAY);
}
else if(type==2){
cvtColor(frame, frame, CV_BGR2GRAY);
//高斯滤波
GaussianBlur(frame, frame, Size(3, 3),
0, 0, BORDER_DEFAULT);
//Canny检测
int edgeThresh =100;
Mat Canny_result;
Canny(frame, frame, edgeThresh, edgeThresh * 3, 3);
}else if(type==3)
{
//Smooth(frame, frame,Size(3, 3), 0, 0);
GaussianBlur(frame, frame, Size(3, 3), 0, 0);
}
else if(type==4){
cvtColor(frame,frame,CV_BGR2GRAY);
threshold(frame, frame, 96, 255, THRESH_BINARY);
}else if (type==5) {
frame=masaike(frame);
}
QImage image=MatToQImage(frame);
//ui->label_11->setScaledContents(true);
double scale=ui->horizontalSlider_suofang->value()/100.0;
QSize qs = ui->label_11->rect().size()*scale;
ui->label_11->setPixmap(QPixmap::fromImage(image).scaled(qs));
ui->label_11->setAlignment(Qt::AlignCenter);
ui->label_11->repaint();
//这里加滤波程序
//long totalFrameNumber = capture.get(CAP_PROP_POS_FRAMES);
// ui->textEdit->append(QString::fromLocal8Bit("正在读取第:第 %1 帧").arg(totalFrameNumber));
}
//Mat转图像
QImage MainWindow::MatToQImage(const cv::Mat& mat)
{
// 8-bits unsigned, NO. OF CHANNELS = 1
if (mat.type() == CV_8UC1)
{
QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);
// Set the color table (used to translate colour indexes to qRgb values)
image.setColorCount(256);
for (int i = 0; i < 256; i++)
{
image.setColor(i, qRgb(i, i, i));
}
// Copy input Mat
uchar *pSrc = mat.data;
for (int row = 0; row < mat.rows; row++)
{
uchar *pDest = image.scanLine(row);
memcpy(pDest, pSrc, mat.cols);
pSrc += mat.step;
}
return image;
}
// 8-bits unsigned, NO. OF CHANNELS = 3
else if (mat.type() == CV_8UC3)
{
// Copy input Mat
const uchar *pSrc = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
return image.rgbSwapped();
}
else if (mat.type() == CV_8UC4)
{
// Copy input Mat
const uchar *pSrc = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32);
return image.copy();
}
else
{
return QImage();
}
}
//暂停/播放
void MainWindow::on_pushButton_6_clicked()
{
if(isstart)
{
timer.stop();
isstart=false;
ui->pushButton_6->setStyleSheet("border-radius:32px;"
"background-image: url(:/myImage/images/start.png);border:none;") ;
}else {
timer.start(delay);
isstart=true;
ui->pushButton_6->setStyleSheet("border-radius:32px;"
"background-image: url(:/myImage/images/stop.png);border:none;") ;
}
}
//灰度
void MainWindow::on_pushButton_7_clicked()
{
type=1;
}
void MainWindow::on_pushButton_8_clicked()
{
type=0;
}
//进度条
void MainWindow::on_VideohorizontalSlider_2_valueChanged(int value)
{
capture.set(CAP_PROP_POS_FRAMES, value);
}
//均值滤波
void MainWindow::on_pushButton_9_clicked()
{
type=2;
}
//平滑
void MainWindow::on_pushButton_10_clicked()
{
type=3;
}
//二值化
void MainWindow::on_pushButton_11_clicked()
{
type=4;
}
//缩放
void MainWindow::on_horizontalSlider_suofang_valueChanged(int value)
{
ui->label_suofangvalue->setText(QString::number(value/100.0));
cout<<value<<endl;
}
Mat MainWindow::masaike(Mat src){
int width = src.rows; //图片的长度
int height = src.cols; //图片的宽度
//10*10的像素点进行填充
int arr = 10;
//i和j代表了矩形区域的左上角的像素坐标
for (int i = width/2.5; i < width/1.5; i+=arr) {
for (int j = height/2.5; j < height/1.5; j+=arr) {
//对矩形区域内的每一个像素值进行遍历
for (int k = i; k < arr + i && k < width; k++) {
for (int m = j; m < arr + j && m < height; m++) {
//在这里进行颜色的修改
src.at<Vec3b>(k, m)[0] = src.at<Vec3b>(i, j)[0];
src.at<Vec3b>(k, m)[1] = src.at<Vec3b>(i, j)[1];
src.at<Vec3b>(k, m)[2] = src.at<Vec3b>(i, j)[2];
}
}
}
}
return src;
}
//马赛克
void MainWindow::on_pushButton_2_clicked()
{
type=5;
}
//工具栏灰度化
void MainWindow::on_action_H_triggered()
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage images=gray(image);
QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//工具栏均值滤波
void MainWindow::on_action_J_triggered()
{
if(origin_path!=nullptr){
QImage image(origin_path);
image=junzhi(image);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//工具栏边缘检测
void MainWindow::on_action_B_triggered()
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage newImage =bianyuan(image);
QImage Image=ImageCenter(newImage,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//工具栏伽马变换
void MainWindow::on_action_G_triggered()
{
if(origin_path!=nullptr){
QImage image(origin_path);
image=gamma(image);
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}else{
QMessageBox::warning(nullptr, "提示", "请先打开图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
//工具栏边缘原图复合
void MainWindow::on_action_Y_triggered()
{
if(origin_path!=nullptr){
QImage images(origin_path);
QImage image2 =fuhe(images);
QImage Image=ImageCenter(image2,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
void MainWindow::on_action_About_triggered()
{
customMsgBox.show();
customMsgBox.exec();
}
//左转
void MainWindow::on_pushButton_turnleft_clicked()
{
if(ui->label_show->pixmap()!=nullptr){
QImage images(ui->label_show->pixmap()->toImage());
QMatrix matrix;
matrix.rotate(-90.0);//逆时针旋转90度
images= images.transformed(matrix,Qt::FastTransformation);
//QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(images));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
void MainWindow::on_pushButton_turnright_clicked()
{
if(ui->label_show->pixmap()!=nullptr){
QImage images(ui->label_show->pixmap()->toImage());
QMatrix matrix;
matrix.rotate(90.0);//逆时针旋转90度
images= images.transformed(matrix,Qt::FastTransformation);
//QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(images));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
void MainWindow::on_pushButton_turnleft_2_clicked()
{
if(ui->label_show->pixmap()!=nullptr){
QImage images(ui->label_show->pixmap()->toImage());
images = images.mirrored(true, false);
//QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(images));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
void MainWindow::on_pushButton_turnleft_3_clicked()
{
if(ui->label_show->pixmap()!=nullptr){
QImage images(ui->label_show->pixmap()->toImage());
images = images.mirrored(false, true);
//QImage Image=ImageCenter(images,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(images));
ui->label_show->setAlignment(Qt::AlignCenter);
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
void MainWindow::on_pushButton_5_clicked()
{
QFile file(":/myImage/images/style.qss");
file.open(QFile::ReadOnly);
QString styleSheet=QString::fromLatin1(file.readAll());
QApplication *qapp;
qapp->setStyleSheet(styleSheet);
}
void MainWindow::on_action_recognition_triggered()
{
recognition=new Recognition(this);
recognition->show();
}
void MainWindow::on_action_camera_recognition_triggered()
{
camera_recognition_window = new camera_recognition;
camera_recognition_window->show();
}
void MainWindow::on_test_database_triggered()
{
QSqlDatabase dbconn = QSqlDatabase::addDatabase("QSQLITE", "testSQLite");
dbconn.setDatabaseName("C:/Users/a1124/fx.db"); //数据库文件
//SQLite数据库文件可用SQLite的命令行工具(c:\sqlite3.exe 数据库名)或用SQLite GUI工具创建,SQLiteSpy
if(!dbconn.open())
{
qDebug()<<dbconn.lastError().text();
QMessageBox::warning(this,"错误","error open database because : "+dbconn.lastError().text());
}
else
{
qDebug()<<"连接数据库成功";
QMessageBox::about(this,"提示","数据库连接成功!");
}
}
C++
1
https://gitee.com/zhiqi-wang/dam.git
git@gitee.com:zhiqi-wang/dam.git
zhiqi-wang
dam
堤坝灾害点检测智能预警系统
master

搜索帮助