diff --git a/CMakeLists.txt b/CMakeLists.txt index 2eda2e1..c49dda3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.5) -set(PROJECT_VERSION 1.4.0.0) +set(PROJECT_VERSION 1.4.1.2) add_definitions(-DProjectVersion=\"${PROJECT_VERSION}\") -project(zxrcClient LANGUAGES CXX) +project(zxrcClient VERSION ${PROJECT_VERSION} LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) @@ -12,6 +12,15 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) +configure_file(qt5app.rc.in + qt5app.rc + @ONLY +) +configure_file(install.nsi.in + install.nsi + @ONLY +) + set(QFluentDIR "C:/QFluentWidgets_v170") set(OpenCV_DIR "C:/opencv/build") @@ -74,10 +83,15 @@ set(PROJECT_SOURCES protocol.h datathread.cpp datathread.h - qt5app.rc + qt5app.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/qt5app.rc ) - +### +###CLIENT 是上位机所应用的场景的标志 +###0为zxj03所要用到的上位机,算法在下位机实现, 通过指令开关算法 +###1为用户所用上位机, 隐藏部分功能 +###2为zxj02所用上位机,算法在上位机实现. add_executable (zxrcClient WIN32 ${PROJECT_SOURCES}) target_include_directories (zxrcClient PRIVATE ${INCLUDE_DIRS}) @@ -85,22 +99,37 @@ target_link_directories (zxrcClient PRIVATE ${LIB_DIRS}) target_link_libraries (zxrcClient PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) target_link_libraries (zxrcClient PRIVATE QFluentWidgets::Widgets ${LIBS}) target_link_libraries (zxrcClient PRIVATE ${OpenCV_LIBS}) - - -add_executable (zxrcClientSim WIN32 ${PROJECT_SOURCES}) -target_include_directories (zxrcClientSim PRIVATE ${INCLUDE_DIRS}) -target_link_directories (zxrcClientSim PRIVATE ${LIB_DIRS}) -target_link_libraries (zxrcClientSim PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) -target_link_libraries (zxrcClientSim PRIVATE QFluentWidgets::Widgets ${LIBS}) -target_link_libraries (zxrcClientSim PRIVATE ${OpenCV_LIBS}) -target_compile_definitions (zxrcClientSim PRIVATE CLIENT=1) - - - -add_executable (zxrcClientPC WIN32 ${PROJECT_SOURCES}) -target_include_directories (zxrcClientPC PRIVATE ${INCLUDE_DIRS}) -target_link_directories (zxrcClientPC PRIVATE ${LIB_DIRS}) -target_link_libraries (zxrcClientPC PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) -target_link_libraries (zxrcClientPC PRIVATE QFluentWidgets::Widgets ${LIBS}) -target_link_libraries (zxrcClientPC PRIVATE ${OpenCV_LIBS}) -target_compile_definitions (zxrcClientPC PRIVATE CLIENT=2) +target_compile_definitions (zxrcClient PRIVATE CLIENT=0) + + +#add_executable (zxrcClientSim WIN32 ${PROJECT_SOURCES}) +#target_include_directories (zxrcClientSim PRIVATE ${INCLUDE_DIRS}) +#target_link_directories (zxrcClientSim PRIVATE ${LIB_DIRS}) +#target_link_libraries (zxrcClientSim PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) +#target_link_libraries (zxrcClientSim PRIVATE QFluentWidgets::Widgets ${LIBS}) +#target_link_libraries (zxrcClientSim PRIVATE ${OpenCV_LIBS}) +#target_compile_definitions (zxrcClientSim PRIVATE CLIENT=1) + + +set(LOCALALGO + avgfilter.cpp + avgfilter.h + bila.cpp + bila.h + clhe.cpp + clhe.h + dde.cpp + dde.h + sagauss.cpp + sagauss.h + twopoint.cpp + twopoint.h + ) + +#add_executable (zxrcClientPC WIN32 ${LOCALALGO} ${PROJECT_SOURCES}) +#target_include_directories (zxrcClientPC PRIVATE ${INCLUDE_DIRS}) +#target_link_directories (zxrcClientPC PRIVATE ${LIB_DIRS}) +#target_link_libraries (zxrcClientPC PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) +#target_link_libraries (zxrcClientPC PRIVATE QFluentWidgets::Widgets ${LIBS}) +#target_link_libraries (zxrcClientPC PRIVATE ${OpenCV_LIBS}) +#target_compile_definitions (zxrcClientPC PRIVATE CLIENT=2) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index eed5726..d9ceb8e 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -96,7 +96,7 @@ qt.qt5.5152.win64_msvc2019_64_kit 1 0 - 2 + 0 Debug 2 @@ -180,7 +180,19 @@ 构建 CMakeProjectManager.MakeStep - 1 + + true + D:\WorkSpace\zxrcClientNew\zxrcClient\logo.ico + D:\WorkSpace/zxrcClientNew/build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release/logo.ico + ProjectExplorer.CopyFileStep + + + true + D:\WorkSpace\zxrcClientNew\zxrcClient\readme.txt + D:\WorkSpace\zxrcClientNew\build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release\readme.txt + ProjectExplorer.CopyFileStep + + 3 构建 构建 ProjectExplorer.BuildSteps.Build @@ -401,42 +413,9 @@ true true true - true - D:/WorkSpace/zxrcClientNew/build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release - - - true - true - true - - 2 - - false - zxrcClientSim - CMakeProjectManager.CMakeRunConfiguration.zxrcClientSim - zxrcClientSim - true - true - true - D:/WorkSpace/zxrcClientNew/build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release - - - true - true - true - - 2 - - false - zxrcClientPC - CMakeProjectManager.CMakeRunConfiguration.zxrcClientPC - zxrcClientPC - true - true - true D:/WorkSpace/zxrcClientNew/build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release - 3 + 1 diff --git a/avgfilter.cpp b/avgfilter.cpp index 83ad08e..7f6b91a 100644 --- a/avgfilter.cpp +++ b/avgfilter.cpp @@ -39,18 +39,16 @@ void avgfilter::slotprocimg(cv::Mat img) emit signalsendimg(img); } else{ -// cv::Mat dst(img.rows,img.cols,CV_16UC1); + cv::Mat dst = (256-para)*(img/256)+para*(lastmat/256); for(int i = 0;i< img.rows;i++){ for(int j = 0;j(i,j))- int(dst.at(i,j)))>(320)) -// dst.at(i,j) = (255-para)*(img.at(i,j)/256)+para*(lastmat.at(i,j)/256); -// else dst.at(i,j) = img.at(i,j); } } -// qDebug()< - +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) @@ -24,7 +24,11 @@ MainWindow::~MainWindow() void MainWindow::initUI() { - b_stat = false; + + b_stat = true; + ui->pushButton_3->setChecked(true); + imageX = -10; + imageY = -10; flip0 = false; flip1 = false; savevideo = false; @@ -32,15 +36,16 @@ void MainWindow::initUI() savesbin = false; shotimg = false; shotbin = false; - path = ""; + fps = 0; fpscount = 0; path = QApplication::applicationDirPath()+"/"; - setWindowTitle(QString(ProjectVersion)); + setWindowTitle(QString::fromLocal8Bit("中芯热成上位机")+ QString(ProjectVersion)); + setWindowIcon(QIcon("logo.ico")); - ui->splitter_2->setCollapsible(1,false); + ui->splitter->setCollapsible(1,false); // QHBoxLayout lout = QHBoxLayout(); @@ -62,7 +67,7 @@ void MainWindow::initUI() ui->toolbox->addItem(m3,u8"显示设置"); ui->toolbox->addItem(m4,u8"保存设置"); - type = gray8; + type = gray16; rows = ui->spinBox->value(); cols = ui->spinBox_2->value(); @@ -78,12 +83,46 @@ void MainWindow::initUI() ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->label->installEventFilter(this); + + lfps = new QLabel; + lpath = new HyperlinkLabel; + lpath->setText(QString::fromLocal8Bit("当前保存路径为")+path); + lpath->setUrl(QUrl(path)); + ui->statusbar->addWidget(lfps); + ui->statusbar->addWidget(lpath); + + b_con = false; + d_con = 1; + d_con_bright = 0; + + } void MainWindow::initConnect() { + connect(ucontrol,SIGNAL(signalSendMessage(QString)),this,SLOT(slotlogtext(QString))); + connect(usb,SIGNAL(signalMessage(QString)),this,SLOT(slotlogtext(QString))); + + connect(m1,SIGNAL(signalsetGPOL(int)),ucontrol,SLOT(setGPOL(int))); + connect(m1,SIGNAL(signalsetIT(double)),ucontrol,SLOT(setIT(double))); + connect(m1,SIGNAL(signalopenTEC(bool)),ucontrol,SLOT(tec(bool))); + connect(m1,SIGNAL(signalset14bit(bool)),ucontrol,SLOT(bit14(bool))); + connect(m1,&menu1::signalset14bit,[=](bool b){ + if(b){ + type = gray16; + usb->SetImageInfo(gray16,rows,cols); + } + else{ + type = gray8; + usb->SetImageInfo(gray8,rows,cols); + } + }); + + +#if CLIENT == 0 || CLIENT==1 connect(usb,SIGNAL(signalGetImage(cv::Mat)),this,SLOT(slotShowImage(cv::Mat))); + connect(m1,SIGNAL(signalsavelow()),ucontrol,SLOT(savelow())); connect(m1,SIGNAL(signalsavehigh()),ucontrol,SLOT(savehigh())); connect(m1,SIGNAL(signalcalck()),ucontrol,SLOT(calck())); @@ -92,16 +131,7 @@ void MainWindow::initConnect() connect(m1,SIGNAL(signalonepoint()),ucontrol,SLOT(onepoint())); connect(m1,SIGNAL(signalsaveb()),ucontrol,SLOT(saveb())); connect(m1,SIGNAL(signalopenb(bool)),ucontrol,SLOT(openb(bool))); - connect(m1,SIGNAL(signalsetGPOL(int)),ucontrol,SLOT(setGPOL(int))); - connect(m1,SIGNAL(signalsetIT(double)),ucontrol,SLOT(setIT(double))); - connect(m1,SIGNAL(signalopenTEC(bool)),ucontrol,SLOT(tec(bool))); - connect(m1,SIGNAL(signalset14bit(bool)),ucontrol,SLOT(bit14(bool))); - connect(m1,&menu1::signalset14bit,[=](bool b){ - if(b) - usb->SetImageInfo(gray16,rows,cols); - else - usb->SetImageInfo(gray8,rows,cols); - }); + connect(m2,SIGNAL(signalsag(bool)),ucontrol,SLOT(setsag(bool))); connect(m2,SIGNAL(signalsetDDE(int)),ucontrol,SLOT(setDDE(int))); connect(m2,SIGNAL(signalsetkf(int)),ucontrol,SLOT(setkf(int))); @@ -112,7 +142,89 @@ void MainWindow::initConnect() ///线性拉伸设置 /// /// - connect(ucontrol,SIGNAL(signalSendMessage(QString)),this,SLOT(slotlogtext(QString))); +#elif CLIENT==2 + connect(usb,SIGNAL(signalGetImage(cv::Mat)),m_tp,SLOT(slotprocimg(cv::Mat))); + connect(m_tp,SIGNAL(signalsendimg(cv::Mat)),m_avg,SLOT(slotprocimg(cv::Mat))); + connect(m_avg,SIGNAL(signalsendimg(cv::Mat)),m_bila,SLOT(slotprocimg(cv::Mat))); + connect(m_bila,SIGNAL(signalsendimg(cv::Mat)),m_sagauss,SLOT(slotprocimg(cv::Mat))); + connect(m_sagauss,SIGNAL(signalsendimg(cv::Mat)),m_dde,SLOT(slotprocimg(cv::Mat))); + connect(m_dde,SIGNAL(signalsendimg(cv::Mat)),m_clhe,SLOT(slotprocimg(cv::Mat))); + connect(m_clhe,SIGNAL(signalsendimg(cv::Mat)),this,SLOT(slotShowImage(cv::Mat))); + + + connect(m1,&menu1::signalsavelow,[=](){ + m_tp->savelow(); + }); + connect(m1,&menu1::signalsavehigh,[=](){ + m_tp->savehigh(); + }); + connect(m1,&menu1::signalcalck,[=](){ + m_tp->calc(); + }); + + connect(m1,&menu1::signalsavek,[=](){ + m_tp->savek(); + }); + connect(m1,&menu1::signalsaveb,[=](){ + m_tp->saveb(); + }); + connect(m1,&menu1::signalonepoint,[=](){ + m_tp->onepoint(); + }); + + connect(m1,&menu1::signalopenk,[=](bool b){ + if(b){ + m_tp->loaddata(); + m_tp->on(cv::Size(cols,rows)); + } + else{ + m_tp->off(); + } + }); + + connect(m2,&menu2::signalsag,[=](bool b){ + if(b){ + m_sagauss->setpara(3,0); + m_sagauss->on(); + } + else{ + m_sagauss->off(); + } + }); + + connect(m2,&menu2::signalbila,[=](bool b){ + if(b){ + m_bila->setparas(5,10000,10); + } + else{ + m_bila->off(); + } + }); + + connect(m2,&menu2::signalsetDDE,[=](int value){ + m_dde->setpara(value/512.0); + }); + + connect(m2,&menu2::signalsetkf,[=](int value){ + m_avg->setpara(value); + }); + connect(m2,&menu2::signalsethist,[=](int value){ + m_clhe->setthreshold(value); + }); + + +#endif + + connect(m2,&menu2::signalsetDE,[=](bool b){ + b_con = b; + }); + connect(m2,&menu2::signalseterate,[=](double rate){ + d_con = rate; + }); + connect(m2,&menu2::signalsetbright,[=](int value){ + d_con_bright = value; + }); + connect(m3,&menu3::signalflip0,[=](bool b){ flip0 = b; @@ -154,6 +266,9 @@ void MainWindow::initConnect() else{ path = dir+"/"; } + lpath->setText(QString::fromLocal8Bit("当前保存路径为")+path); + lpath->setUrl(QUrl(path)); + }); connect(m4,&menu4::signalshotimg,[=](){ @@ -164,6 +279,8 @@ void MainWindow::initConnect() }); connect(m4,&menu4::signalsavevideo,[=](bool b){ if(b){ + if(fps<10) + slotlogtext(QDateTime::currentDateTime().toString()+ QString::fromLocal8Bit(":当前帧率不稳定,请确保帧率稳定后再保存视频")); QString now = QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_ss"); std::string filename = path.toStdString()+now.toStdString()+".mp4"; writer = new cv::VideoWriter(filename,cv::VideoWriter::fourcc('M','P','4','V'),fps,cv::Size(cols,rows),false); @@ -172,6 +289,8 @@ void MainWindow::initConnect() savevideo =true; } else{ + if(!savevideo) + return; savevideo = false; writer->release(); QDateTime t = QDateTime::currentDateTime(); @@ -217,6 +336,12 @@ void MainWindow::initConnect() }); + + + connect(lpath,&QPushButton::clicked,[=](){ + QDesktopServices::openUrl(QUrl(path)); + }); + } void MainWindow::hideui() @@ -229,42 +354,53 @@ void MainWindow::hideui() void MainWindow::on_pushButton_clicked()// 开启传输 { if(ui->pushButton->isChecked()){ + QTimer *t = new QTimer; + connect(t,&QTimer::timeout,[=](){ + on_pushButton_2_clicked(); usb->SetImageInfo(type,rows,cols); usb->setStatu(true); usb->start(); ui->pushButton->setText(u8"停止传输"); + t->stop(); + }); + t->start(2000); + ui->label->setText(QString::fromLocal8Bit("开启传输中,请等待")); } else{ usb->setStatu(false); usb->stopProcessData(); ui->pushButton->setText(u8"开始传输"); } + + } void MainWindow::on_pushButton_2_clicked() { - //恢复默认设置 -#ifndef CLIENT - ucontrol->bit14(false); - type = gray8; + ucontrol->bit14(true); -#elif CLIENT == 1 - ucontrol->bit14(false); - type = gray8; - qDebug()<<"sim"; + usb->SetImageInfo(type,rows,cols); -#elif CLIENT == 2 - ucontrol->bit14(true); - type = gray16; - qDebug()<<"pc"; -#endif +#if CLIENT == 0 || CLIENT == 1 ucontrol->setIT(5.0); ucontrol->setGPOL(800); - ucontrol->sethist(200); ucontrol->openk(true); ucontrol->openb(true); + + + + +#elif CLIENT == 2 + + + ucontrol->openk(false); + ucontrol->openb(false); +#endif + + + } @@ -283,32 +419,15 @@ void MainWindow::on_pushButton_3_clicked() void MainWindow::slotShowImage(cv::Mat img) { fpscount +=1; - - if(shotimg){ - QString now = QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_ss"); - QString file = path+ now+".png"; - cv::imwrite(file.toLocal8Bit().toStdString(),img); - shotimg = false; - } - if(shotbin){ - QDateTime t = QDateTime::currentDateTime(); - QString filename = path+ t.toString("yyyy-MM-dd-hh-mm-ss"); - if(type == gray8) - filename+= "-8bit.bin"; - else if(type == gray16) - filename+= "-14bit.bin"; - QFile file(filename); - file.open(QIODevice::NewOnly); - file.write((char*)img.data,img.total()*img.elemSize()); - file.flush(); - file.close(); - shotbin = false; + if(flip0){ + cv::flip(img,img,0); } - if(savevideo){ - writer->write(img); + if(flip1){ + cv::flip(img,img,1); } + if(savebin){ purefile->write((char*)img.data,img.total()*img.elemSize()); purefile->flush(); @@ -329,13 +448,7 @@ void MainWindow::slotShowImage(cv::Mat img) } - if(flip0){ - cv::flip(img,img,0); - } - if(flip1){ - cv::flip(img,img,1); - } if(turnl){ @@ -345,6 +458,33 @@ void MainWindow::slotShowImage(cv::Mat img) } + + + if(b_con){ + cv::Mat image; + + + img.convertTo(image,CV_32SC1); + + double avg = cv::mean(image).val[0]; + + cv::Mat dst = cv::Mat(512,640,CV_16UC1); + + int s,d; + + for(int i = 0;i(i,j) - avg; + d = s*d_con+avg+d_con_bright*4; + if(d<0)d = 0; + if(d>65535) d = 65535; + dst.at(i,j) = d; + } + } + img = dst; + } + + if(b_stat ){ if(img.type() == CV_16UC1) lastimage = img/4; @@ -455,15 +595,50 @@ void MainWindow::slotShowImage(cv::Mat img) ui->lineEdit_7->setText(QString::number(avg,'f',2)); ui->lineEdit_8->setText(QString::number(sigma,'f',2)); } - if(img.type() == CV_16UC1) - img.convertTo(img,CV_8UC1,1.0/257); + { + img.convertTo(img,CV_8UC1,1.0/257); + } QImage image(img.data,img.cols,img.rows,img.cols,QImage::Format_Grayscale8); QPixmap pix = QPixmap::fromImage(image); + if(shotimg){ + QString now = QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_ss"); + QString imgfile = path+ now+".png"; + cv::imwrite(imgfile.toLocal8Bit().toStdString(),img); + QString t =path+now+".tiff"; + cv::imwrite(t.toStdString(),img); + + QString filename = path+now+".bin"; + + QFile file(filename); + file.open(QIODevice::NewOnly); + file.write((char*)img.data,img.total()*img.elemSize()); + file.flush(); + file.close(); + shotimg = false; + } + if(shotbin){ + QDateTime t = QDateTime::currentDateTime(); + QString filename = path+ t.toString("yyyy-MM-dd-hh-mm-ss"); + if(type == gray8) + filename+= "-8bit.bin"; + else if(type == gray16) + filename+= "-14bit.bin"; + QFile file(filename); + file.open(QIODevice::NewOnly); + file.write((char*)img.data,img.total()*img.elemSize()); + file.flush(); + file.close(); + shotbin = false; + } + + if(savevideo){ + writer->write(img); + } // QPixmap pix = QPixmap::fromImage(img); - if(b_stat){ + if(b_stat &(!b_fullscreen)){ QPainter p(&pix); QPen pen = p.pen(); QPen npen(QColor(0xad,0x14,0x53)); @@ -475,8 +650,10 @@ void MainWindow::slotShowImage(cv::Mat img) } p.setPen(pen); } - - ui->label->setPixmap(pix); + if(b_fullscreen) + ui->label->setPixmap(pix.scaled(ui->label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation)); + else + ui->label->setPixmap(pix); } @@ -487,15 +664,11 @@ void MainWindow::slotlogtext(QString msg) void MainWindow::slotlogstatus() { - QString msg = QString::fromLocal8Bit("当前图像深度为"); - if(type==gray8){ - msg+=QString::fromLocal8Bit( "8位"); - } - else{ - msg+=QString::fromLocal8Bit("14位"); - } - msg+=QString::fromLocal8Bit(",帧率为")+QString::number(fps); - ui->statusbar->showMessage(msg); + + + lfps->setText(QString::fromLocal8Bit("当前帧率为")+QString::number(fps)); + + } bool MainWindow::eventFilter(QObject *obj, QEvent *e) @@ -506,6 +679,23 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *e) imageY =ev->y(); return true; } + + if(obj == ui->label && e->type()== QEvent::MouseButtonDblClick){ + b_fullscreen = !b_fullscreen; + if(b_fullscreen){ + ui->label->setWindowFlag(Qt::Window); + ui->label->showFullScreen(); + ui->label->setAlignment(Qt::AlignHCenter); + } + else{ + ui->label->setWindowFlags(Qt::SubWindow); + ui->label->showNormal(); + ui->label->setAlignment(Qt::AlignLeft|Qt::AlignTop); + } + return true; + } + + return false; } @@ -542,6 +732,16 @@ void MainWindow::initIns() slotlogstatus(); }); t->start(1000); + + +#if CLIENT == 2 + m_avg = new avgfilter(); + m_bila = new bila(); + m_dde = new dde(); + m_sagauss = new sagauss(); + m_tp = new twoPoint(); + m_clhe = new clhe(); +#endif } diff --git a/mainwindow.h b/mainwindow.h index d2ae7d2..e488636 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -3,6 +3,7 @@ #include #include +#include #include "menu1.h" #include "menu2.h" #include "menu3.h" @@ -13,6 +14,15 @@ #include "protocol.h" +#include "avgfilter.h" +#include "bila.h" +#include "dde.h" +#include "sagauss.h" +#include "twopoint.h" +#include "clhe.h" + +#include "qfluentwidgets" + QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE @@ -68,6 +78,16 @@ private: menu3* m3; menu4* m4; + QLabel* lfps ; + HyperlinkLabel* lpath; + + avgfilter* m_avg; + bila* m_bila; + dde* m_dde; + sagauss* m_sagauss; + twoPoint* m_tp; + clhe* m_clhe; + usbcontrol* ucontrol; usbthread* usb; @@ -84,6 +104,8 @@ private: bool turnr; bool b_stat;// + + bool b_fullscreen; int imageY; int imageX; @@ -104,6 +126,11 @@ private: int fpscount; + bool b_con; + double d_con; + double d_con_bright; + + cv::Mat lastimage; }; diff --git a/mainwindow.ui b/mainwindow.ui index d186fe3..e6af38e 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -6,7 +6,7 @@ 0 0 - 1092 + 1374 607 @@ -14,20 +14,7 @@ MainWindow - - - - - 1 - - - 10000 - - - 640 - - - + @@ -35,17 +22,17 @@ - - + + - 行数 + 恢复默认 - - + + - 恢复默认 + 行数 @@ -69,23 +56,43 @@ + + + + 1 + + + 10000 + + + 640 + + + - + Qt::Horizontal - - - Qt::Vertical + + + + 350 + 0 + + + + + 400 + 16777215 + - - - 648 - 520 + 660 + 532 @@ -96,8 +103,8 @@ 0 0 - 646 - 518 + 658 + 530 @@ -116,12 +123,28 @@ - - - + + + 350 + 0 + + + + + 400 + 16777215 + + + + + + + 暂停统计 + + - - + + @@ -130,22 +153,19 @@ - - - - - - - - + + - 开始统计 + 中心点纵坐标 + + + @@ -153,6 +173,16 @@ + + + + + + + 区域均方差 + + + @@ -163,70 +193,56 @@ - - - - Qt::Vertical - - - - 20 - 40 - + + + + 截止点数 - + - - + + + + + - 中心点纵坐标 + 溢出点数 - + + + + 全局平均值 - + - + - 全局均方根 + 全局均方差 - - - - 区域均方根 - - - - - - - - - - 截止点数 - - + + - - - - 溢出点数 + + + + + 400 + 16777215 + - - - @@ -267,15 +283,15 @@ 1 - Splitter - QSplitter + PushButton + QPushButton
qfluentwidgets
- 1
- PushButton - QPushButton + Splitter + QSplitter
qfluentwidgets
+ 1
diff --git a/menu1.cpp b/menu1.cpp index 0febaed..3a53469 100644 --- a/menu1.cpp +++ b/menu1.cpp @@ -6,6 +6,8 @@ menu1::menu1(QWidget *parent) : ui(new Ui::menu1) { ui->setupUi(this); + + ui->pushButton_12->hide(); } menu1::~menu1() @@ -46,13 +48,7 @@ void menu1::on_pushButton_4_clicked() void menu1::on_pushButton_5_clicked() { - emit signalopenk(ui->pushButton_5->isChecked()); - if(ui->pushButton_5->isChecked()){ - ui->pushButton_5->setText(u8"关闭K值"); - } - else{ - ui->pushButton_5->setText(u8"开启K值"); - } + emit signalopenk(true); } @@ -70,13 +66,7 @@ void menu1::on_pushButton_7_clicked() void menu1::on_pushButton_8_clicked() { - emit signalopenb(ui->pushButton_8->isChecked()); - if(ui->pushButton_8->isChecked()){ - ui->pushButton_8->setText(u8"关闭B值"); - } - else{ - ui->pushButton_8->setText(u8"开启B值"); - } + emit signalopenb(true); } @@ -115,3 +105,15 @@ void menu1::on_pushButton_12_clicked() } } + +void menu1::on_pushButton_13_clicked() +{ + emit signalopenk(false); +} + + +void menu1::on_pushButton_14_clicked() +{ + emit signalopenb(false); +} + diff --git a/menu1.h b/menu1.h index e19811c..39bbf81 100644 --- a/menu1.h +++ b/menu1.h @@ -55,6 +55,10 @@ private slots: void on_pushButton_12_clicked(); + void on_pushButton_13_clicked(); + + void on_pushButton_14_clicked(); + private: Ui::menu1 *ui; }; diff --git a/menu1.ui b/menu1.ui index effd7a1..ba1e10d 100644 --- a/menu1.ui +++ b/menu1.ui @@ -6,7 +6,7 @@ 0 0 - 209 + 256 640 @@ -14,24 +14,17 @@ Form - - - - 存低温背景 - - - - - + + - 存高温背景 + 开启TEC - - + + - 计算K值 + 切换14Bit @@ -42,10 +35,33 @@ - - + + + + 35.000000000000000 + + + 5.000000000000000 + + + + + - 开启K值 + 设置GPOL(mv) + + + + + + + 4000 + + + 0 + + + 800 @@ -56,62 +72,66 @@ - - + + - 保存B值 + 存低温背景 - - + + - 开启B值 + 设置积分时间(ms) - - - - 4000 + + + + 计算K值 - - 0 + + + + + + 存高温背景 - - + + - 设置GPOL(mv) + 保存B值 - - - - 35.000000000000000 + + + + 开启K值 - - + + - 设置积分时间(ms) + 关闭K值 - - + + - 开启TEC + 开启B值 - - + + - 切换14Bit + 关闭B值 diff --git a/menu2.cpp b/menu2.cpp index cd42fa9..8e6f622 100644 --- a/menu2.cpp +++ b/menu2.cpp @@ -6,6 +6,17 @@ menu2::menu2(QWidget *parent) : ui(new Ui::menu2) { ui->setupUi(this); + + + ui->pushButton->hide(); + ui->pushButton_2->hide(); + ui->pushButton_3->hide(); + ui->pushButton_4->hide(); + ui->pushButton_6->hide(); + ui->spinBox->hide(); + ui->spinBox_2->hide(); + ui->spinBox_3->hide(); + } menu2::~menu2() @@ -15,11 +26,11 @@ menu2::~menu2() void menu2::hideui() { - ui->label->hide(); - ui->label_2->hide(); - ui->spinBox_4->hide(); - ui->doubleSpinBox->hide(); - ui->pushButton_5->hide(); +// ui->label->hide(); +// ui->label_2->hide(); +// ui->spinBox_4->hide(); +// ui->doubleSpinBox->hide(); +// ui->pushButton_5->hide(); } void menu2::on_pushButton_clicked() diff --git a/menu2.ui b/menu2.ui index 0a4b921..d9a70f8 100644 --- a/menu2.ui +++ b/menu2.ui @@ -21,16 +21,6 @@ - - - - 1023 - - - 250 - - - @@ -87,7 +77,17 @@ - + + + 4 + + + 0.100000000000000 + + + 1.000000000000000 + + @@ -97,7 +97,11 @@ - + + + 16000 + + @@ -106,6 +110,9 @@ + + + diff --git a/menu4.cpp b/menu4.cpp index b1db177..30636ec 100644 --- a/menu4.cpp +++ b/menu4.cpp @@ -10,6 +10,9 @@ menu4::menu4(QWidget *parent) : ui(new Ui::menu4) { ui->setupUi(this); + dir = QApplication::applicationDirPath(); +// process.setProgram("explorer.exe"); + ui->pushButton_3->hide(); } menu4::~menu4() @@ -19,7 +22,7 @@ menu4::~menu4() void menu4::on_pushButton_clicked() { - QString dir = QFileDialog::getExistingDirectory(this,QString::fromLocal8Bit("设置存储位置")); + dir = QFileDialog::getExistingDirectory(this,QString::fromLocal8Bit("设置存储位置")); emit signalsetdir(dir); qDebug()<spinBox->value()); } +#include +void menu4::on_pushButton_7_clicked() +{ +// QStringList arg; +// arg.append(dir); +// process.setArguments(arg); + process.start("explorer.exe",QStringList("D:/workspace")); +// process.start("notepad.exe",QStringList(dir)); +} + diff --git a/menu4.h b/menu4.h index 4864890..648884d 100644 --- a/menu4.h +++ b/menu4.h @@ -2,6 +2,7 @@ #define MENU4_H #include +#include namespace Ui { class menu4; @@ -38,8 +39,12 @@ private slots: void on_pushButton_6_clicked(); + void on_pushButton_7_clicked(); + private: Ui::menu4 *ui; + QString dir; + QProcess process; }; #endif // MENU4_H diff --git a/menu4.ui b/menu4.ui index aab2e86..0bf2f4a 100644 --- a/menu4.ui +++ b/menu4.ui @@ -14,45 +14,52 @@ Form - - + + + + 2 + + + 1024 + + - - + + - 保存指定帧数数据 + 保存连续原始数据 - + - 保存连续原始数据 + 保存单帧原始数据 - + 保存视频 - - + + - 保存单帧原始数据 + 保存单帧图像 - - + + - 保存单帧图像 + 保存指定帧数数据 - + 设置文件保存路径 diff --git a/qt5app.rc b/qt5app.rc.in similarity index 53% rename from qt5app.rc rename to qt5app.rc.in index 98241ec..a4ba03d 100644 --- a/qt5app.rc +++ b/qt5app.rc.in @@ -2,8 +2,9 @@ 1 VERSIONINFO - FILEVERSION 1,4,0,0 - PRODUCTVERSION 1,4,0,0 + FILEVERSION @CMAKE_PROJECT_VERSION_MAJOR@,@CMAKE_PROJECT_VERSION_MINOR@,@CMAKE_PROJECT_VERSION_PATCH@,@CMAKE_PROJECT_VERSION_TWEAK@ + PRODUCTVERSION @CMAKE_PROJECT_VERSION_MAJOR@,@CMAKE_PROJECT_VERSION_MINOR@,@CMAKE_PROJECT_VERSION_PATCH@,@CMAKE_PROJECT_VERSION_TWEAK@ + FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -21,12 +22,12 @@ BEGIN VALUE "Comments", "client" VALUE "CompanyName", "zxrc" VALUE "FileDescription", "zxrc" - VALUE "FileVersion", "1.4.0.0" + VALUE "FileVersion", " @CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@.@CMAKE_PROJECT_VERSION_TWEAK@" VALUE "InternalName", "zxrc" VALUE "LegalCopyright", "zxrctech" VALUE "OriginalFilename", "zxrcClient.exe" VALUE "ProductName", "zxrcClient" - VALUE "ProductVersion", "1.2.13.0" + VALUE "ProductVersion", " @CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@.@CMAKE_PROJECT_VERSION_TWEAK@" END END BLOCK "VarFileInfo" diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..0a38454 --- /dev/null +++ b/readme.txt @@ -0,0 +1,17 @@ +版本:1.4.1.1 +启动前添加延时2s +取消双边滤波等功能 +保存图片时,同时保存png,tiff和二进制文件 + +版本:1.4.1.0 +将关闭K和关闭B独立出来 +添加数字增强功能 +添加状态栏显示 +添加打开保存路径的功能 + + + +版本:1.4.0.0 +使用新UI实现了图像的采集保存和机芯控制 +同时编译了两个程序, 即zxrcClient.exe 和zxrcClientSim.exe, 其中Sim为简化版的意思, 即提供给普通客户使用的版本.其中去掉了一些功能. +当前版本号为1.4.0.0, 后续更新中, 添加新功能, 或修复较大bug时, 会增加第三位计数, 修复修复小bug时, 只会增加第四位计数 \ No newline at end of file diff --git a/usbcontrol.cpp b/usbcontrol.cpp index db8f674..306a2f6 100644 --- a/usbcontrol.cpp +++ b/usbcontrol.cpp @@ -13,9 +13,14 @@ usbcontrol::usbcontrol(QObject* parent): int usbcontrol::sendMessage(char *msg, int msglen) { - if(msglen!=8) + if(msglen!=8){ return -1; - else + } +// else + + for(int i = 0;i<4;i++){ + qDebug()<