Browse Source

完善多点校正算法

master
zara 1 year ago
parent
commit
6de68a8548
  1. 5
      CMakeLists.txt
  2. 20
      CMakeLists.txt.user
  3. 20
      install.nsi.in
  4. 79
      mainwindow.cpp
  5. 2
      mainwindow.h
  6. 64
      mainwindow.ui
  7. 14
      menu1.cpp
  8. 4
      menu1.h
  9. 16
      menu4.cpp
  10. 2
      menu4.h
  11. 5
      menu4.ui
  12. 78
      menu5.cpp
  13. 17
      menu5.h
  14. 53
      menu5.ui
  15. 131
      multipoint.cpp
  16. 11
      multipoint.h
  17. 1
      twopoint.h
  18. 8
      usbcontrol.cpp

5
CMakeLists.txt

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.5)
set(PROJECT_VERSION 1.4.2.0) set(PROJECT_VERSION 1.4.2.1)
add_definitions(-DProjectVersion=\"${PROJECT_VERSION}\") add_definitions(-DProjectVersion=\"${PROJECT_VERSION}\")
project(zxrcClient VERSION ${PROJECT_VERSION} LANGUAGES CXX) project(zxrcClient VERSION ${PROJECT_VERSION} LANGUAGES CXX)
@ -53,11 +53,12 @@ set(LIBS
legacy_stdio_definitions legacy_stdio_definitions
) )
find_package(QFluentWidgets REQUIRED)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(QFluentWidgets REQUIRED)
set(PROJECT_SOURCES set(PROJECT_SOURCES
main.cpp main.cpp

20
CMakeLists.txt.user

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 11.0.1, 2024-06-06T18:00:46. --> <!-- Written by QtCreator 11.0.1, 2024-06-13T18:16:45. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
@ -400,6 +400,22 @@
</valuemap> </valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> <value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">zxrcClient</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.zxrcClient</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">zxrcClient</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/WorkSpace/zxrcClientNew/build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value> <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value> <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
@ -415,7 +431,7 @@
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/WorkSpace/zxrcClientNew/build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release</value> <value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/WorkSpace/zxrcClientNew/build-zxrcClient-Desktop_Qt_5_15_2_MSVC2019_64bit-Release</value>
</valuemap> </valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value> <value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
</valuemap> </valuemap>
</data> </data>
<data> <data>

20
install.nsi.in

@ -46,7 +46,7 @@ SetCompressor lzma
; MUI end ------ ; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe" OutFile "${PRODUCT_NAME} ${PRODUCT_VERSION}Setup.exe"
InstallDir "$PROGRAMFILES\中芯热成上位机" InstallDir "$PROGRAMFILES\中芯热成上位机"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show ShowInstDetails show
@ -65,7 +65,7 @@ Section "MainSection" SEC01
CreateShortCut "$DESKTOP\中芯热成上位机.lnk" "$INSTDIR\zxrcClient.exe" CreateShortCut "$DESKTOP\中芯热成上位机.lnk" "$INSTDIR\zxrcClient.exe"
SetOverwrite try SetOverwrite try
File "D3Dcompiler_47.dll" File "D3Dcompiler_47.dll"
File "histviewer.exe"
SetOutPath "$INSTDIR\iconengines" SetOutPath "$INSTDIR\iconengines"
File "iconengines\qsvgicon.dll" File "iconengines\qsvgicon.dll"
SetOutPath "$INSTDIR\imageformats" SetOutPath "$INSTDIR\imageformats"
@ -88,11 +88,10 @@ Section "MainSection" SEC01
SetOutPath "$INSTDIR\platforms" SetOutPath "$INSTDIR\platforms"
File "platforms\qwindows.dll" File "platforms\qwindows.dll"
SetOutPath "$INSTDIR" SetOutPath "$INSTDIR"
File "Qt5Charts.dll"
File "Qt5Core.dll" File "Qt5Core.dll"
File "Qt5Gui.dll" File "Qt5Gui.dll"
File "Qt5SerialPort.dll"
File "Qt5Svg.dll" File "Qt5Svg.dll"
File "Qt5Xml.dll"
File "Qt5Widgets.dll" File "Qt5Widgets.dll"
File "qtcsettings.cmake" File "qtcsettings.cmake"
SetOutPath "$INSTDIR\styles" SetOutPath "$INSTDIR\styles"
@ -122,10 +121,7 @@ Section "MainSection" SEC01
File "translations\qt_uk.qm" File "translations\qt_uk.qm"
File "translations\qt_zh_TW.qm" File "translations\qt_zh_TW.qm"
SetOutPath "$INSTDIR" SetOutPath "$INSTDIR"
File "usbcam.lib"
File "zxrcClient.exp"
File "zxrcClient.lib"
File "更新记录.txt"
SectionEnd SectionEnd
Section -AdditionalIcons Section -AdditionalIcons
@ -156,9 +152,6 @@ FunctionEnd
Section Uninstall Section Uninstall
Delete "$INSTDIR\uninst.exe" Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\更新记录.txt"
Delete "$INSTDIR\zxrcClient.lib"
Delete "$INSTDIR\zxrcClient.exp"
Delete "$INSTDIR\usbcam.lib" Delete "$INSTDIR\usbcam.lib"
Delete "$INSTDIR\translations\qt_zh_TW.qm" Delete "$INSTDIR\translations\qt_zh_TW.qm"
Delete "$INSTDIR\translations\qt_uk.qm" Delete "$INSTDIR\translations\qt_uk.qm"
@ -187,10 +180,10 @@ Section Uninstall
Delete "$INSTDIR\qtcsettings.cmake" Delete "$INSTDIR\qtcsettings.cmake"
Delete "$INSTDIR\Qt5Widgets.dll" Delete "$INSTDIR\Qt5Widgets.dll"
Delete "$INSTDIR\Qt5Svg.dll" Delete "$INSTDIR\Qt5Svg.dll"
Delete "$INSTDIR\Qt5SerialPort.dll"
Delete "$INSTDIR\Qt5Gui.dll" Delete "$INSTDIR\Qt5Gui.dll"
Delete "$INSTDIR\Qt5Xml.dll"
Delete "$INSTDIR\Qt5Core.dll" Delete "$INSTDIR\Qt5Core.dll"
Delete "$INSTDIR\Qt5Charts.dll"
Delete "$INSTDIR\platforms\qwindows.dll" Delete "$INSTDIR\platforms\qwindows.dll"
Delete "$INSTDIR\opengl32sw.dll" Delete "$INSTDIR\opengl32sw.dll"
Delete "$INSTDIR\opencv_world470.dll" Delete "$INSTDIR\opencv_world470.dll"
@ -208,7 +201,6 @@ Section Uninstall
Delete "$INSTDIR\imageformats\qicns.dll" Delete "$INSTDIR\imageformats\qicns.dll"
Delete "$INSTDIR\imageformats\qgif.dll" Delete "$INSTDIR\imageformats\qgif.dll"
Delete "$INSTDIR\iconengines\qsvgicon.dll" Delete "$INSTDIR\iconengines\qsvgicon.dll"
Delete "$INSTDIR\histviewer.exe"
Delete "$INSTDIR\D3Dcompiler_47.dll" Delete "$INSTDIR\D3Dcompiler_47.dll"
Delete "$INSTDIR\zxrcClient.exe" Delete "$INSTDIR\zxrcClient.exe"

79
mainwindow.cpp

@ -3,18 +3,26 @@
#include <QDateTime> #include <QDateTime>
#include <QDesktopServices> #include <QDesktopServices>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
, ui(new Ui::MainWindow) , ui(new Ui::MainWindow)
{ {
ui->setupUi(this); ui->setupUi(this);
initIns(); initIns();
initUI(); initUI();
initConnect(); initConnect();
#if CLIENT==1
//#if CLIENT==1
hideui(); hideui();
#endif //#endif
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@ -68,8 +76,10 @@ void MainWindow::initUI()
ui->toolbox->addItem(m2,u8"算法设置"); ui->toolbox->addItem(m2,u8"算法设置");
ui->toolbox->addItem(m3,u8"显示设置"); ui->toolbox->addItem(m3,u8"显示设置");
ui->toolbox->addItem(m4,u8"保存设置"); ui->toolbox->addItem(m4,u8"保存设置");
ui->toolbox->addItem(m5,u8"多点校正");
#if CLIENT==2
ui->toolbox->addItem(m5,u8"多点校正");
#endif
type = gray16; type = gray16;
rows = ui->spinBox->value(); rows = ui->spinBox->value();
cols = ui->spinBox_2->value(); cols = ui->spinBox_2->value();
@ -103,9 +113,12 @@ void MainWindow::initUI()
void MainWindow::initConnect() void MainWindow::initConnect()
{ {
connect(ucontrol,SIGNAL(signalSendMessage(QString)),this,SLOT(slotlogtext(QString))); connect(ucontrol,SIGNAL(signalSendMessage(QString)),this,SLOT(slotlogtext(QString)));
connect(usb,SIGNAL(signalMessage(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(signalsetGPOL(int)),ucontrol,SLOT(setGPOL(int)));
connect(m1,SIGNAL(signalsetIT(double)),ucontrol,SLOT(setIT(double))); connect(m1,SIGNAL(signalsetIT(double)),ucontrol,SLOT(setIT(double)));
connect(m1,SIGNAL(signalopenTEC(bool)),ucontrol,SLOT(tec(bool))); connect(m1,SIGNAL(signalopenTEC(bool)),ucontrol,SLOT(tec(bool)));
@ -122,6 +135,7 @@ void MainWindow::initConnect()
}); });
#if CLIENT == 0 || CLIENT==1 #if CLIENT == 0 || CLIENT==1
connect(usb,SIGNAL(signalGetImage(cv::Mat)),this,SLOT(slotShowImage(cv::Mat))); connect(usb,SIGNAL(signalGetImage(cv::Mat)),this,SLOT(slotShowImage(cv::Mat)));
@ -135,19 +149,17 @@ void MainWindow::initConnect()
connect(m1,SIGNAL(signalsaveb()),ucontrol,SLOT(saveb())); connect(m1,SIGNAL(signalsaveb()),ucontrol,SLOT(saveb()));
connect(m1,SIGNAL(signalopenb(bool)),ucontrol,SLOT(openb(bool))); connect(m1,SIGNAL(signalopenb(bool)),ucontrol,SLOT(openb(bool)));
connect(m2,SIGNAL(signalsag(bool)),ucontrol,SLOT(setsag(bool))); connect(m2,SIGNAL(signalsag(bool)),ucontrol,SLOT(setsag(bool)));
connect(m2,SIGNAL(signalsetDDE(int)),ucontrol,SLOT(setDDE(int))); connect(m2,SIGNAL(signalsetDDE(int)),ucontrol,SLOT(setDDE(int)));
connect(m2,SIGNAL(signalsetkf(int)),ucontrol,SLOT(setkf(int))); connect(m2,SIGNAL(signalsetkf(int)),ucontrol,SLOT(setkf(int)));
connect(m2,SIGNAL(signalsethist(int)),ucontrol,SLOT(sethist(int))); connect(m2,SIGNAL(signalsethist(int)),ucontrol,SLOT(sethist(int)));
// connect(m2,SIGNAL(signalsetDE(bool)),)
// connect(m2,SIGNAL(signalseterate(double)),)
// connect(m2,SIGNAL(signalsetbright(int)),)
///线性拉伸设置
///
///
#elif CLIENT==2 #elif CLIENT==2
// connect(usb,SIGNAL(signalGetImage(cv::Mat)),m_tp,SLOT(slotprocimg(cv::Mat))); // 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_tp,SIGNAL(signalsendimg(cv::Mat)),m_avg,SLOT(slotprocimg(cv::Mat)));
connect(usb,SIGNAL(signalGetImage(cv::Mat)),m_mp,SLOT(runData(cv::Mat))); connect(usb,SIGNAL(signalGetImage(cv::Mat)),m_mp,SLOT(runData(cv::Mat)));
connect(m_mp,SIGNAL(signalsendimg(cv::Mat)),m_avg,SLOT(slotprocimg(cv::Mat))); connect(m_mp,SIGNAL(signalsendimg(cv::Mat)),m_avg,SLOT(slotprocimg(cv::Mat)));
@ -218,7 +230,13 @@ void MainWindow::initConnect()
m_clhe->setthreshold(value); m_clhe->setthreshold(value);
}); });
connect(m5,SIGNAL(signalsave()),m_mp,SLOT(save()));
connect(m5,SIGNAL(signalcalc(QVector<double>)),m_mp,SLOT(calcData(QVector<double>)));
connect(m5,SIGNAL(signalsavedata(QString)),m_mp,SLOT(savedata(QString)));
connect(m_mp,SIGNAL(signalNewFrame(double)),m5,SLOT(slotRefresh(double)));
connect(m5,SIGNAL(signalloaddata(QString)),m_mp,SLOT(loaddata(QString)));
connect(m5,SIGNAL(signaloff()),m_mp,SLOT(off()));
#endif #endif
connect(m2,&menu2::signalsetDE,[=](bool b){ connect(m2,&menu2::signalsetDE,[=](bool b){
@ -263,6 +281,7 @@ void MainWindow::initConnect()
connect(m3,&menu3::signalcolorrgb,[=](){ connect(m3,&menu3::signalcolorrgb,[=](){
colortype = 2; colortype = 2;
}); });
qDebug()<<__LINE__;
connect(m4,&menu4::signalsetdir,[=](QString dir){ connect(m4,&menu4::signalsetdir,[=](QString dir){
@ -283,6 +302,8 @@ void MainWindow::initConnect()
connect(m4,&menu4::signalshotbin,[=](){ connect(m4,&menu4::signalshotbin,[=](){
shotbin = true; shotbin = true;
}); });
connect(m4,&menu4::signalsavevideo,[=](bool b){ connect(m4,&menu4::signalsavevideo,[=](bool b){
if(b){ if(b){
if(fps<10) if(fps<10)
@ -327,6 +348,7 @@ void MainWindow::initConnect()
} }
}); });
connect(m4,&menu4::signalsavesbin,[=](int frames){ connect(m4,&menu4::signalsavesbin,[=](int frames){
if(savesbin) if(savesbin)
return; return;
@ -344,12 +366,11 @@ void MainWindow::initConnect()
connect(m5,SIGNAL(signalsave()),m_mp,SLOT(save()));
connect(m5,SIGNAL(signalcalc()),m_mp,SLOT(calcData()));
connect(m5,SIGNAL(signalsavedata()),m_mp,SLOT(savedata()));
connect(lpath,&QPushButton::clicked,[=](){ connect(lpath,&QPushButton::clicked,[=](){
QDesktopServices::openUrl(QUrl(path)); QDesktopServices::openUrl(QUrl::fromLocalFile(path));
}); });
} }
@ -392,6 +413,9 @@ void MainWindow::on_pushButton_2_clicked()
usb->SetImageInfo(type,rows,cols); usb->SetImageInfo(type,rows,cols);
m1->opentec();
ucontrol->tec(true);
#if CLIENT == 0 || CLIENT == 1 #if CLIENT == 0 || CLIENT == 1
ucontrol->setIT(5.0); ucontrol->setIT(5.0);
@ -428,8 +452,8 @@ void MainWindow::on_pushButton_3_clicked()
void MainWindow::slotShowImage(cv::Mat img) void MainWindow::slotShowImage(cv::Mat img)
{ {
cv::Mat o;
cv::mean(img,o);
fpscount +=1; fpscount +=1;
if(flip0){ if(flip0){
@ -452,7 +476,7 @@ void MainWindow::slotShowImage(cv::Mat img)
spurefile->flush(); spurefile->flush();
} }
sbinnum -=1; sbinnum -=1;
// qDebug()<<sbinnum;
if(sbinnum == 0){ if(sbinnum == 0){
spurefile->close(); spurefile->close();
@ -619,7 +643,7 @@ void MainWindow::slotShowImage(cv::Mat img)
QString imgfile = path+ now+".png"; QString imgfile = path+ now+".png";
cv::imwrite(imgfile.toLocal8Bit().toStdString(),img); cv::imwrite(imgfile.toLocal8Bit().toStdString(),img);
QString t =path+now+".tiff"; QString t =path+now+".tiff";
cv::imwrite(t.toStdString(),img); cv::imwrite(t.toLocal8Bit().toStdString(),img);
QString filename = path+now+".bin"; QString filename = path+now+".bin";
@ -650,7 +674,7 @@ void MainWindow::slotShowImage(cv::Mat img)
} }
// QPixmap pix = QPixmap::fromImage(img);
if(b_stat &(!b_fullscreen)){ if(b_stat &(!b_fullscreen)){
QPainter p(&pix); QPainter p(&pix);
QPen pen = p.pen(); QPen pen = p.pen();
@ -728,11 +752,18 @@ void MainWindow::keyPressEvent(QKeyEvent *ev)
imageY+=1; imageY+=1;
} }
if((ev->modifiers() == Qt::ControlModifier) && (ev->key()== Qt::Key_A)){
m1->showui();
}
if((ev->modifiers() == Qt::ControlModifier) && (ev->key()== Qt::Key_Q)){
m1->hideui();
}
} }
void MainWindow::initIns() void MainWindow::initIns()
{ {
qRegisterMetaType<cv::Mat>("cv::Mat"); qRegisterMetaType<cv::Mat>("cv::Mat");
qRegisterMetaType<QVector<double>>("QVector<double>");
usb = new usbthread(); usb = new usbthread();
ucontrol = new usbcontrol(); ucontrol = new usbcontrol();
@ -775,15 +806,3 @@ void MainWindow::on_spinBox_2_valueChanged(int arg1)
ui->label->resize(cols,rows); ui->label->resize(cols,rows);
} }
void MainWindow::on_pushButton_4_clicked()
{
saveeeee = true;
}
void MainWindow::on_pushButton_5_clicked()
{
}

2
mainwindow.h

@ -67,9 +67,7 @@ private slots:
void on_spinBox_2_valueChanged(int arg1); void on_spinBox_2_valueChanged(int arg1);
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
private: private:
void initIns(); void initIns();

64
mainwindow.ui

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1386</width> <width>1386</width>
<height>619</height> <height>648</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -15,7 +15,20 @@
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="2" column="0" colspan="6"> <item row="0" column="5">
<widget class="SpinBox" name="spinBox_2">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="value">
<number>640</number>
</property>
</widget>
</item>
<item row="1" column="0" colspan="6">
<widget class="Splitter" name="splitter"> <widget class="Splitter" name="splitter">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -50,7 +63,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>658</width> <width>658</width>
<height>530</height> <height>559</height>
</rect> </rect>
</property> </property>
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
@ -193,22 +206,8 @@
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="3">
<widget class="PushButton" name="pushButton_2"> <widget class="SpinBox" name="spinBox">
<property name="text">
<string>恢复默认</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="TogglePushButton" name="pushButton">
<property name="text">
<string>开始传输</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="SpinBox" name="spinBox_2">
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>
</property> </property>
@ -216,7 +215,7 @@
<number>10000</number> <number>10000</number>
</property> </property>
<property name="value"> <property name="value">
<number>640</number> <number>512</number>
</property> </property>
</widget> </widget>
</item> </item>
@ -227,19 +226,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="3">
<widget class="SpinBox" name="spinBox">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="value">
<number>512</number>
</property>
</widget>
</item>
<item row="0" column="4"> <item row="0" column="4">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
@ -247,17 +233,17 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="4"> <item row="0" column="0">
<widget class="QPushButton" name="pushButton_4"> <widget class="TogglePushButton" name="pushButton">
<property name="text"> <property name="text">
<string>存一帧</string> <string>开始传输</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="5"> <item row="0" column="1">
<widget class="QPushButton" name="pushButton_5"> <widget class="PushButton" name="pushButton_2">
<property name="text"> <property name="text">
<string>计算</string> <string>恢复默认</string>
</property> </property>
</widget> </widget>
</item> </item>

14
menu1.cpp

@ -19,7 +19,19 @@ void menu1::hideui()
{ {
ui->pushButton_4->hide(); ui->pushButton_4->hide();
ui->pushButton_7->hide(); ui->pushButton_7->hide();
ui->pushButton_12->hide(); // ui->pushButton_12->hide();
}
void menu1::showui()
{
ui->pushButton_4->show();
ui->pushButton_7->show();
}
void menu1::opentec()
{
ui->pushButton_11->setChecked(true);
on_pushButton_11_clicked();
} }
void menu1::on_pushButton_clicked() void menu1::on_pushButton_clicked()

4
menu1.h

@ -15,6 +15,7 @@ public:
explicit menu1(QWidget *parent = nullptr); explicit menu1(QWidget *parent = nullptr);
~menu1(); ~menu1();
void hideui(); void hideui();
void showui();
signals: signals:
void signalsavelow(); void signalsavelow();
void signalsavehigh(); void signalsavehigh();
@ -29,6 +30,9 @@ signals:
void signalopenTEC(bool); void signalopenTEC(bool);
void signalset14bit(bool); void signalset14bit(bool);
public:
void opentec();
private slots: private slots:
void on_pushButton_clicked(); void on_pushButton_clicked();

16
menu4.cpp

@ -70,12 +70,12 @@ void menu4::on_pushButton_6_clicked()
} }
#include <QProcess> #include <QProcess>
void menu4::on_pushButton_7_clicked() //void menu4::on_pushButton_7_clicked()
{ //{
// QStringList arg; //// QStringList arg;
// arg.append(dir); //// arg.append(dir);
// process.setArguments(arg); //// process.setArguments(arg);
process.start("explorer.exe",QStringList("D:/workspace")); // process.start("explorer.exe",QStringList("D:/workspace"));
// process.start("notepad.exe",QStringList(dir)); //// process.start("notepad.exe",QStringList(dir));
} //}

2
menu4.h

@ -39,7 +39,7 @@ private slots:
void on_pushButton_6_clicked(); void on_pushButton_6_clicked();
void on_pushButton_7_clicked(); // void on_pushButton_7_clicked();
private: private:
Ui::menu4 *ui; Ui::menu4 *ui;

5
menu4.ui

@ -17,11 +17,14 @@
<item row="7" column="0"> <item row="7" column="0">
<widget class="SpinBox" name="spinBox"> <widget class="SpinBox" name="spinBox">
<property name="minimum"> <property name="minimum">
<number>2</number> <number>1</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>1024</number> <number>1024</number>
</property> </property>
<property name="value">
<number>1</number>
</property>
</widget> </widget>
</item> </item>
<item row="6" column="0" colspan="2"> <item row="6" column="0" colspan="2">

78
menu5.cpp

@ -1,18 +1,64 @@
#include "menu5.h" #include "menu5.h"
#include "ui_menu5.h" #include "ui_menu5.h"
#include <QCheckBox>
#include <QFileDialog>
menu5::menu5(QWidget *parent) : menu5::menu5(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::menu5) ui(new Ui::menu5)
{ {
ui->setupUi(this); ui->setupUi(this);
}
ui->tableWidget->setBorderVisible(true);
ui->tableWidget->setBorderRadius(8);
ui->tableWidget->verticalHeader()->hide();
ui->tableWidget->resizeColumnsToContents();
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
connect(ui->tableWidget->horizontalHeader(),&QHeaderView::sectionClicked,[=](int i){
if(i == 1){
}
});
}
menu5::~menu5() menu5::~menu5()
{ {
delete ui; delete ui;
} }
void menu5::slotRefresh(double gray)
{
qDebug()<<__FILE__<<__LINE__;
if(grays.length() == 0){
grays.push_back(gray);
ui->tableWidget->insertRow(0);
ui->tableWidget->setItem(0,0,new QTableWidgetItem(QString::number( gray)));
ui->tableWidget->setCellWidget(0,1,new QCheckBox());
return;
}
for(int i = 0; i< grays.length();i++){
if (gray<grays.at(i)){
grays.insert(i,gray);
ui->tableWidget->insertRow(i);
ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number( gray)));
ui->tableWidget->setCellWidget(i,1,new QCheckBox());
return;
}
}
grays.push_back(gray);
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
ui->tableWidget->setItem(grays.length()-1,0,new QTableWidgetItem(QString::number( gray)));
ui->tableWidget->setCellWidget(grays.length() - 1,1,new QCheckBox());
return;
}
void menu5::on_pushButton_clicked() void menu5::on_pushButton_clicked()
{ {
emit signalsave(); emit signalsave();
@ -21,12 +67,38 @@ void menu5::on_pushButton_clicked()
void menu5::on_pushButton_2_clicked() void menu5::on_pushButton_2_clicked()
{ {
emit signalcalc(); QVector<double> vct;
for(int i = 0;i< ui->tableWidget->rowCount();i++){
if(qobject_cast<QCheckBox*>(ui->tableWidget->cellWidget(i,1))->isChecked()){
vct.append(grays.at(i));
}
}
emit signalcalc(vct);
// emit signalcalc();
} }
void menu5::on_pushButton_3_clicked() void menu5::on_pushButton_3_clicked()
{ {
emit signalsavedata(); QString path = QFileDialog::getExistingDirectory(nullptr,QString::fromLocal8Bit("选择数据保存路径"),QString("./"));
emit signalsavedata(path);
}
void menu5::on_pushButton_4_clicked()
{
// emit signalloaddata();
QString path = QFileDialog::getExistingDirectory(nullptr,QString::fromLocal8Bit("选择数据保存路径"),QString("./"));
emit signalloaddata(path);
}
void menu5::on_pushButton_5_clicked()
{
emit signaloff();
} }

17
menu5.h

@ -2,7 +2,7 @@
#define MENU5_H #define MENU5_H
#include <QWidget> #include <QWidget>
#include <QVector>
namespace Ui { namespace Ui {
class menu5; class menu5;
} }
@ -15,19 +15,28 @@ public:
explicit menu5(QWidget *parent = nullptr); explicit menu5(QWidget *parent = nullptr);
~menu5(); ~menu5();
public slots:
void slotRefresh(double);
private slots: private slots:
void on_pushButton_clicked(); void on_pushButton_clicked();
void on_pushButton_2_clicked(); void on_pushButton_2_clicked();
void on_pushButton_3_clicked(); void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
signals: signals:
void signalsave(); void signalsave();
void signalcalc(); void signalcalc(QVector<double> );
void signalsavedata(); void signalsavedata(QString);
void signalloaddata(QString);
void signaloff();
private: private:
Ui::menu5 *ui; Ui::menu5 *ui;
QVector<double> grays;
}; };
#endif // MENU5_H #endif // MENU5_H

53
menu5.ui

@ -14,6 +14,20 @@
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>开始计算</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>加载数据</string>
</property>
</widget>
</item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QPushButton" name="pushButton"> <widget class="QPushButton" name="pushButton">
<property name="text"> <property name="text">
@ -21,22 +35,49 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="3" column="0">
<widget class="QPushButton" name="pushButton_2"> <widget class="QPushButton" name="pushButton_3">
<property name="text"> <property name="text">
<string>开始计算</string> <string>保存数据</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="1" column="0">
<widget class="QPushButton" name="pushButton_3"> <widget class="TableWidget" name="tableWidget">
<property name="minimumSize">
<size>
<width>0</width>
<height>200</height>
</size>
</property>
<column>
<property name="text">
<string>亮度</string>
</property>
</column>
<column>
<property name="text">
<string>选中</string>
</property>
</column>
</widget>
</item>
<item row="4" column="0">
<widget class="QPushButton" name="pushButton_5">
<property name="text"> <property name="text">
<string>保存数据</string> <string>关闭校正</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<customwidgets>
<customwidget>
<class>TableWidget</class>
<extends>QTableWidget</extends>
<header location="global">qfluentwidgets</header>
</customwidget>
</customwidgets>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>

131
multipoint.cpp

@ -1,6 +1,7 @@
#include "multipoint.h" #include "multipoint.h"
#include "QDebug" #include "QDebug"
#include <QFile> #include <QFile>
#include <QFileDialog>
MultiPoint::MultiPoint(QObject *parent) MultiPoint::MultiPoint(QObject *parent)
: QObject{parent} : QObject{parent}
@ -17,30 +18,40 @@ void MultiPoint::saveData(cv::Mat img)
{ {
cv::Mat temp; cv::Mat temp;
img.copyTo(temp); img.copyTo(temp);
datas[cv::mean(img)[0]] = temp; datas[cv::mean(img)[0]/4] = temp;
emit signalNewFrame(cv::mean(img)[0]/4);
} }
void MultiPoint::calcData() void MultiPoint::calcData(QVector<double> vct)
{ {
qDebug()<<__FILE__<<__LINE__;
ready = false; ready = false;
// stagecount = datas.size();
stagecount = vct.length();
if(stagecount<2) if(stagecount<2)
return; return;
qDebug()<<"statge count = "<< stagecount;
double v0 = datas.begin().key(); // double v0 = datas[vct.at(0)].key();
double v0 = vct.first();
stagecount = datas.size();
double vn =( datas.begin()+stagecount-1).key(); // double vn =( datas.begin()+stagecount-1).key();
double vn = vct.last();
stages = (double*)malloc(sizeof(double)*512*640*(stagecount+1)); stages = (double*)malloc(sizeof(double)*512*640*(stagecount+1));
kstages = (double*)malloc(sizeof(double)*512*640*(stagecount+1)); kstages = (double*)malloc(sizeof(double)*512*640*(stagecount+1));
bstages = (double*)malloc(sizeof(double)*512*640*(stagecount+1)); bstages = (double*)malloc(sizeof(double)*512*640*(stagecount+1));
QMap<double,cv::Mat>::Iterator start = datas.begin(); // QMap<double,cv::Mat>::Iterator start = datas.begin();
QMap<double,cv::Mat>::Iterator end ; // QMap<double,cv::Mat>::Iterator end ;
memset(kstages,0,sizeof(double)*512*640); memset(kstages,0,sizeof(double)*512*640);
memset(bstages,0,sizeof(double)*512*640); memset(bstages,0,sizeof(double)*512*640);
@ -49,22 +60,29 @@ void MultiPoint::calcData()
int k = 1; int k = 1;
for(;k<stagecount;start++,k++){ // for(;k<stagecount;start++,k++){
end = start+1; for(;k<stagecount;k++){
double vs = start.key(); // end = start+1;
double ve = end.key(); // double vs = start.key();
// double ve = end.key();
// cv::Mat ms = start.value();
// cv::Mat me = end.value();
double vs = vct.at(k-1);
double ve = vct.at(k);
cv::Mat ms = datas[vs];
cv::Mat me = datas[ve];
vs = (vs-v0)/(vn-v0)*65535; vs = (vs-v0)/(vn-v0)*65535;
ve = (ve-v0)/(vn-v0)*65535; ve = (ve-v0)/(vn-v0)*65535;
cv::Mat ms = start.value();
cv::Mat me = end.value();
double* ss = stages+(k-1)*512*640; double* ss = stages+(k-1)*512*640;
double* ks = kstages+k*512*640; double* ks = kstages+k*512*640;
// *(bstages+k) = vs;
double* bs = bstages+k*512*640; double* bs = bstages+k*512*640;
/// y = kx+b /// y = kx+b
/// vs = k*x0+b /// vs = k*x0+b
/// ve = k*x1+b /// ve = k*x1+b
@ -76,17 +94,24 @@ void MultiPoint::calcData()
for(int j = 0;j< ms.cols;j++){ for(int j = 0;j< ms.cols;j++){
*(ss+i*ms.cols+j) = ms.at<float>(i,j); *(ss+i*ms.cols+j) = ms.at<float>(i,j);
*(ks+i*ms.cols+j) = (ve-vs)/(me.at<float>(i,j) - ms.at<float>(i,j)); *(ks+i*ms.cols+j) = (ve-vs)/(me.at<float>(i,j) - ms.at<float>(i,j));
*(bs+i*ms.cols+j) = vs - k*ms.at<float>(i,j); *(bs+i*ms.cols+j) = vs ;
//- k*ms.at<float>(i,j);
} }
} }
} }
qDebug()<<__FILE__<<__LINE__;
double* ss = stages+(k-1)*512*640; double* ss = stages+(k-1)*512*640;
double* ks = kstages+k*512*640; double* ks = kstages+k*512*640;
double* bs = bstages+k*512*640; double* bs = bstages+k;
cv::Mat ms = end.value(); // *(bs) = 65535;
// cv::Mat ms = end.value();
cv::Mat ms = datas[vct.last()];
for(int i = 0;i<512;i++){ for(int i = 0;i<512;i++){
for(int j = 0;j<640;j++){ for(int j = 0;j<640;j++){
@ -94,9 +119,9 @@ void MultiPoint::calcData()
*(ks+i*640+j) = 0; *(ks+i*640+j) = 0;
*(bs+i*640+j) = 65535; *(bs+i*640+j) = 65535;
} }
} }
qDebug()<<__FILE__<<__LINE__;
ready = true; ready = true;
@ -118,7 +143,12 @@ void MultiPoint::runData(cv::Mat img)
if( img.at<ushort>(i,j) < stages[k*img.rows*img.cols+i*img.cols+j]) if( img.at<ushort>(i,j) < stages[k*img.rows*img.cols+i*img.cols+j])
break; break;
} }
dst.at<ushort>(i,j) = kstages[k*img.rows*img.cols+i*img.cols+j]*img.at<ushort>(i,j)+ bstages[k*img.rows*img.cols+i*img.cols+j]; if(k == 0)
dst.at<ushort>(i,j) = 0;
else
// dst.at<ushort>(i,j) = kstages[k*img.rows*img.cols+i*img.cols+j]*img.at<ushort>(i,j)+ bstages[k];
dst.at<ushort>(i,j) = kstages[k*img.rows*img.cols+i*img.cols+j]*(img.at<ushort>(i,j)-stages[(k-1)*img.rows*img.cols+i*img.cols+j])+ bstages[k];
} }
} }
emit signalsendimg(dst); emit signalsendimg(dst);
@ -131,6 +161,8 @@ void MultiPoint::runData(cv::Mat img)
void MultiPoint::meanmat(cv::Mat img) void MultiPoint::meanmat(cv::Mat img)
{ {
if(n_save == 32){ if(n_save == 32){
img.convertTo(msave,CV_32FC1,1.0/32.0); img.convertTo(msave,CV_32FC1,1.0/32.0);
} }
@ -151,27 +183,64 @@ void MultiPoint::meanmat(cv::Mat img)
void MultiPoint::save() void MultiPoint::save()
{ {
qDebug()<<__FILE__<<__LINE__;
n_save = 32; n_save = 32;
b_save = true; b_save = true;
} }
void MultiPoint::savedata() void MultiPoint::savedata(QString path)
{ {
int k =0; // int k =0;
for(QMap<double,cv::Mat>::Iterator iter = datas.begin();iter!= datas.end();iter++){ // for(QMap<double,cv::Mat>::Iterator iter = datas.begin();iter!= datas.end();iter++){
cv::imwrite(QString::number(k).toStdString()+ ".tiff",iter.value()); // cv::imwrite(QString::number(k).toStdString()+ ".tiff",iter.value());
k+=1; // k+=1;
} // }
QFile fk("k.bin");
QFile fs(path+ "/s.bin");
fs.open(QIODevice::ReadWrite);
fs.write((char*)stages,(stagecount+1)*640*512*8);
fs.close();
QFile fk(path+ "/k.bin");
fk.open(QIODevice::ReadWrite); fk.open(QIODevice::ReadWrite);
fk.write((char*)kstages,(k+1)*640*512*4); fk.write((char*)kstages,(stagecount+1)*640*512*8);
fk.close(); fk.close();
QFile fb("b.bin"); QFile fb(path+"/b.bin");
fb.open(QIODevice::ReadWrite); fb.open(QIODevice::ReadWrite);
fb.write((char*)bstages,(k+1)*640*512*4); fb.write((char*)bstages,(stagecount+1)*640*512*8);
fb.close(); fb.close();
} }
void MultiPoint::loaddata(QString path )
{
QFile fk(path+"/k.bin");
fk.open(QIODevice::ReadOnly);
QByteArray data = fk.readAll();
kstages = (double*)malloc(data.length());
memcpy(kstages,data.data(),data.size());
QFile fb(path+"/b.bin");
fb.open(QIODevice::ReadOnly);
data = fb.readAll();
bstages = (double*)malloc(data.length());
memcpy(bstages,data.data(),data.length());
QFile fs(path+"/s.bin");
fs.open(QIODevice::ReadOnly);
data = fs.readAll();
stages = (double*)malloc(data.length());
memcpy(stages,data.data(),data.length());
stagecount = data.length()/8/512/640 - 1;
qDebug()<<"stagecount"<<stagecount;
ready = true;
}
void MultiPoint::off()
{
ready= false;
}

11
multipoint.h

@ -4,6 +4,7 @@
#include <QObject> #include <QObject>
#include <QMap> #include <QMap>
#include <QThread> #include <QThread>
#include <QVector>
#include <opencv2/opencv.hpp> #include <opencv2/opencv.hpp>
@ -18,7 +19,7 @@ public:
public slots: public slots:
void saveData(cv::Mat ); void saveData(cv::Mat );
void calcData(); void calcData(QVector<double>);
void runData(cv::Mat ); void runData(cv::Mat );
void meanmat(cv::Mat); void meanmat(cv::Mat);
@ -26,12 +27,16 @@ public slots:
void save(); void save();
void savedata(); void savedata(QString);
void loaddata(QString);
void off();
signals: signals:
void signalsendimg(cv::Mat); void signalsendimg(cv::Mat);
void signalNewFrame(double);
private: private:
@ -55,6 +60,8 @@ private:
int n_save; int n_save;
}; };
#endif // MULTIPOINT_H #endif // MULTIPOINT_H

1
twopoint.h

@ -54,6 +54,7 @@ signals:
void signalsendimg(cv::Mat); void signalsendimg(cv::Mat);
private: private:
cv::Mat lowtemp; cv::Mat lowtemp;
cv::Mat hightemp; cv::Mat hightemp;

8
usbcontrol.cpp

@ -16,11 +16,9 @@ int usbcontrol::sendMessage(char *msg, int msglen)
if(msglen!=8){ if(msglen!=8){
return -1; return -1;
} }
// else
for(int i = 0;i<4;i++){
qDebug()<<QString::number(msg[i],16);
}
msg[7]=0; msg[7]=0;
for(int i = 1;i<7;i++){ for(int i = 1;i<7;i++){
msg[7] +=msg[i]; msg[7] +=msg[i];
@ -123,7 +121,7 @@ void usbcontrol::bit14(bool b)
log = t.toString()+QString::fromLocal8Bit("设置14bit输出"); log = t.toString()+QString::fromLocal8Bit("设置14bit输出");
else else
log = t.toString()+QString::fromLocal8Bit("设置8bit输出"); log = t.toString()+QString::fromLocal8Bit("设置8bit输出");
emit signalSendMessage(log); // emit signalSendMessage(log);
} }

Loading…
Cancel
Save