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 @@ @@ -1,5 +1,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}\")
project(zxrcClient VERSION ${PROJECT_VERSION} LANGUAGES CXX)
@ -53,11 +53,12 @@ set(LIBS @@ -53,11 +53,12 @@ set(LIBS
legacy_stdio_definitions
)
find_package(QFluentWidgets REQUIRED)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(QFluentWidgets REQUIRED)
set(PROJECT_SOURCES
main.cpp

20
CMakeLists.txt.user

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<data>
<variable>EnvironmentId</variable>
@ -400,6 +400,22 @@ @@ -400,6 +400,22 @@
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<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.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
@ -415,7 +431,7 @@ @@ -415,7 +431,7 @@
<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>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
</valuemap>
</data>
<data>

20
install.nsi.in

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

79
mainwindow.cpp

@ -3,18 +3,26 @@ @@ -3,18 +3,26 @@
#include <QDateTime>
#include <QDesktopServices>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initIns();
initUI();
initConnect();
#if CLIENT==1
//#if CLIENT==1
hideui();
#endif
//#endif
}
MainWindow::~MainWindow()
@ -68,8 +76,10 @@ void MainWindow::initUI() @@ -68,8 +76,10 @@ void MainWindow::initUI()
ui->toolbox->addItem(m2,u8"算法设置");
ui->toolbox->addItem(m3,u8"显示设置");
ui->toolbox->addItem(m4,u8"保存设置");
ui->toolbox->addItem(m5,u8"多点校正");
#if CLIENT==2
ui->toolbox->addItem(m5,u8"多点校正");
#endif
type = gray16;
rows = ui->spinBox->value();
cols = ui->spinBox_2->value();
@ -103,9 +113,12 @@ void MainWindow::initUI() @@ -103,9 +113,12 @@ void MainWindow::initUI()
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)));
@ -122,6 +135,7 @@ void MainWindow::initConnect() @@ -122,6 +135,7 @@ void MainWindow::initConnect()
});
#if CLIENT == 0 || CLIENT==1
connect(usb,SIGNAL(signalGetImage(cv::Mat)),this,SLOT(slotShowImage(cv::Mat)));
@ -135,19 +149,17 @@ void MainWindow::initConnect() @@ -135,19 +149,17 @@ void MainWindow::initConnect()
connect(m1,SIGNAL(signalsaveb()),ucontrol,SLOT(saveb()));
connect(m1,SIGNAL(signalopenb(bool)),ucontrol,SLOT(openb(bool)));
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)));
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
// 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(usb,SIGNAL(signalGetImage(cv::Mat)),m_mp,SLOT(runData(cv::Mat)));
connect(m_mp,SIGNAL(signalsendimg(cv::Mat)),m_avg,SLOT(slotprocimg(cv::Mat)));
@ -218,7 +230,13 @@ void MainWindow::initConnect() @@ -218,7 +230,13 @@ void MainWindow::initConnect()
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
connect(m2,&menu2::signalsetDE,[=](bool b){
@ -263,6 +281,7 @@ void MainWindow::initConnect() @@ -263,6 +281,7 @@ void MainWindow::initConnect()
connect(m3,&menu3::signalcolorrgb,[=](){
colortype = 2;
});
qDebug()<<__LINE__;
connect(m4,&menu4::signalsetdir,[=](QString dir){
@ -283,6 +302,8 @@ void MainWindow::initConnect() @@ -283,6 +302,8 @@ void MainWindow::initConnect()
connect(m4,&menu4::signalshotbin,[=](){
shotbin = true;
});
connect(m4,&menu4::signalsavevideo,[=](bool b){
if(b){
if(fps<10)
@ -327,6 +348,7 @@ void MainWindow::initConnect() @@ -327,6 +348,7 @@ void MainWindow::initConnect()
}
});
connect(m4,&menu4::signalsavesbin,[=](int frames){
if(savesbin)
return;
@ -344,12 +366,11 @@ void MainWindow::initConnect() @@ -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,[=](){
QDesktopServices::openUrl(QUrl(path));
QDesktopServices::openUrl(QUrl::fromLocalFile(path));
});
}
@ -392,6 +413,9 @@ void MainWindow::on_pushButton_2_clicked() @@ -392,6 +413,9 @@ void MainWindow::on_pushButton_2_clicked()
usb->SetImageInfo(type,rows,cols);
m1->opentec();
ucontrol->tec(true);
#if CLIENT == 0 || CLIENT == 1
ucontrol->setIT(5.0);
@ -428,8 +452,8 @@ void MainWindow::on_pushButton_3_clicked() @@ -428,8 +452,8 @@ void MainWindow::on_pushButton_3_clicked()
void MainWindow::slotShowImage(cv::Mat img)
{
cv::Mat o;
cv::mean(img,o);
fpscount +=1;
if(flip0){
@ -452,7 +476,7 @@ void MainWindow::slotShowImage(cv::Mat img) @@ -452,7 +476,7 @@ void MainWindow::slotShowImage(cv::Mat img)
spurefile->flush();
}
sbinnum -=1;
// qDebug()<<sbinnum;
if(sbinnum == 0){
spurefile->close();
@ -619,7 +643,7 @@ void MainWindow::slotShowImage(cv::Mat img) @@ -619,7 +643,7 @@ void MainWindow::slotShowImage(cv::Mat img)
QString imgfile = path+ now+".png";
cv::imwrite(imgfile.toLocal8Bit().toStdString(),img);
QString t =path+now+".tiff";
cv::imwrite(t.toStdString(),img);
cv::imwrite(t.toLocal8Bit().toStdString(),img);
QString filename = path+now+".bin";
@ -650,7 +674,7 @@ void MainWindow::slotShowImage(cv::Mat img) @@ -650,7 +674,7 @@ void MainWindow::slotShowImage(cv::Mat img)
}
// QPixmap pix = QPixmap::fromImage(img);
if(b_stat &(!b_fullscreen)){
QPainter p(&pix);
QPen pen = p.pen();
@ -728,11 +752,18 @@ void MainWindow::keyPressEvent(QKeyEvent *ev) @@ -728,11 +752,18 @@ void MainWindow::keyPressEvent(QKeyEvent *ev)
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()
{
qRegisterMetaType<cv::Mat>("cv::Mat");
qRegisterMetaType<QVector<double>>("QVector<double>");
usb = new usbthread();
ucontrol = new usbcontrol();
@ -775,15 +806,3 @@ void MainWindow::on_spinBox_2_valueChanged(int arg1) @@ -775,15 +806,3 @@ void MainWindow::on_spinBox_2_valueChanged(int arg1)
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: @@ -67,9 +67,7 @@ private slots:
void on_spinBox_2_valueChanged(int arg1);
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
private:
void initIns();

64
mainwindow.ui

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

14
menu1.cpp

@ -19,7 +19,19 @@ void menu1::hideui() @@ -19,7 +19,19 @@ void menu1::hideui()
{
ui->pushButton_4->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()

4
menu1.h

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

16
menu4.cpp

@ -70,12 +70,12 @@ void menu4::on_pushButton_6_clicked() @@ -70,12 +70,12 @@ void menu4::on_pushButton_6_clicked()
}
#include <QProcess>
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));
}
//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));
//}

2
menu4.h

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

5
menu4.ui

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

78
menu5.cpp

@ -1,18 +1,64 @@ @@ -1,18 +1,64 @@
#include "menu5.h"
#include "ui_menu5.h"
#include <QCheckBox>
#include <QFileDialog>
menu5::menu5(QWidget *parent) :
QWidget(parent),
ui(new Ui::menu5)
{
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()
{
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()
{
emit signalsave();
@ -21,12 +67,38 @@ void menu5::on_pushButton_clicked() @@ -21,12 +67,38 @@ void menu5::on_pushButton_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()
{
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 @@ @@ -2,7 +2,7 @@
#define MENU5_H
#include <QWidget>
#include <QVector>
namespace Ui {
class menu5;
}
@ -15,19 +15,28 @@ public: @@ -15,19 +15,28 @@ public:
explicit menu5(QWidget *parent = nullptr);
~menu5();
public slots:
void slotRefresh(double);
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
signals:
void signalsave();
void signalcalc();
void signalsavedata();
void signalcalc(QVector<double> );
void signalsavedata(QString);
void signalloaddata(QString);
void signaloff();
private:
Ui::menu5 *ui;
QVector<double> grays;
};
#endif // MENU5_H

53
menu5.ui

@ -14,6 +14,20 @@ @@ -14,6 +14,20 @@
<string>Form</string>
</property>
<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">
<widget class="QPushButton" name="pushButton">
<property name="text">
@ -21,22 +35,49 @@ @@ -21,22 +35,49 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="pushButton_2">
<item row="3" column="0">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>开始计算</string>
<string>保存数据</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton_3">
<item row="1" column="0">
<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">
<string>保存数据</string>
<string>关闭校正</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>TableWidget</class>
<extends>QTableWidget</extends>
<header location="global">qfluentwidgets</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

131
multipoint.cpp

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
#include "multipoint.h"
#include "QDebug"
#include <QFile>
#include <QFileDialog>
MultiPoint::MultiPoint(QObject *parent)
: QObject{parent}
@ -17,30 +18,40 @@ void MultiPoint::saveData(cv::Mat img) @@ -17,30 +18,40 @@ void MultiPoint::saveData(cv::Mat img)
{
cv::Mat 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;
// stagecount = datas.size();
stagecount = vct.length();
if(stagecount<2)
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));
kstages = (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 end ;
// QMap<double,cv::Mat>::Iterator start = datas.begin();
// QMap<double,cv::Mat>::Iterator end ;
memset(kstages,0,sizeof(double)*512*640);
memset(bstages,0,sizeof(double)*512*640);
@ -49,22 +60,29 @@ void MultiPoint::calcData() @@ -49,22 +60,29 @@ void MultiPoint::calcData()
int k = 1;
for(;k<stagecount;start++,k++){
end = start+1;
double vs = start.key();
double ve = end.key();
// for(;k<stagecount;start++,k++){
for(;k<stagecount;k++){
// end = start+1;
// 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;
ve = (ve-v0)/(vn-v0)*65535;
cv::Mat ms = start.value();
cv::Mat me = end.value();
double* ss = stages+(k-1)*512*640;
double* ks = kstages+k*512*640;
// *(bstages+k) = vs;
double* bs = bstages+k*512*640;
/// y = kx+b
/// vs = k*x0+b
/// ve = k*x1+b
@ -76,17 +94,24 @@ void MultiPoint::calcData() @@ -76,17 +94,24 @@ void MultiPoint::calcData()
for(int j = 0;j< ms.cols;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));
*(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* ks = kstages+k*512*640;
double* bs = bstages+k*512*640;
cv::Mat ms = end.value();
double* bs = bstages+k;
// *(bs) = 65535;
// cv::Mat ms = end.value();
cv::Mat ms = datas[vct.last()];
for(int i = 0;i<512;i++){
for(int j = 0;j<640;j++){
@ -94,9 +119,9 @@ void MultiPoint::calcData() @@ -94,9 +119,9 @@ void MultiPoint::calcData()
*(ks+i*640+j) = 0;
*(bs+i*640+j) = 65535;
}
}
qDebug()<<__FILE__<<__LINE__;
ready = true;
@ -118,7 +143,12 @@ void MultiPoint::runData(cv::Mat img) @@ -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])
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);
@ -131,6 +161,8 @@ void MultiPoint::runData(cv::Mat img) @@ -131,6 +161,8 @@ void MultiPoint::runData(cv::Mat img)
void MultiPoint::meanmat(cv::Mat img)
{
if(n_save == 32){
img.convertTo(msave,CV_32FC1,1.0/32.0);
}
@ -151,27 +183,64 @@ void MultiPoint::meanmat(cv::Mat img) @@ -151,27 +183,64 @@ void MultiPoint::meanmat(cv::Mat img)
void MultiPoint::save()
{
qDebug()<<__FILE__<<__LINE__;
n_save = 32;
b_save = true;
}
void MultiPoint::savedata()
void MultiPoint::savedata(QString path)
{
int k =0;
for(QMap<double,cv::Mat>::Iterator iter = datas.begin();iter!= datas.end();iter++){
cv::imwrite(QString::number(k).toStdString()+ ".tiff",iter.value());
k+=1;
}
QFile fk("k.bin");
// int k =0;
// for(QMap<double,cv::Mat>::Iterator iter = datas.begin();iter!= datas.end();iter++){
// cv::imwrite(QString::number(k).toStdString()+ ".tiff",iter.value());
// k+=1;
// }
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.write((char*)kstages,(k+1)*640*512*4);
fk.write((char*)kstages,(stagecount+1)*640*512*8);
fk.close();
QFile fb("b.bin");
QFile fb(path+"/b.bin");
fb.open(QIODevice::ReadWrite);
fb.write((char*)bstages,(k+1)*640*512*4);
fb.write((char*)bstages,(stagecount+1)*640*512*8);
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 @@ @@ -4,6 +4,7 @@
#include <QObject>
#include <QMap>
#include <QThread>
#include <QVector>
#include <opencv2/opencv.hpp>
@ -18,7 +19,7 @@ public: @@ -18,7 +19,7 @@ public:
public slots:
void saveData(cv::Mat );
void calcData();
void calcData(QVector<double>);
void runData(cv::Mat );
void meanmat(cv::Mat);
@ -26,12 +27,16 @@ public slots: @@ -26,12 +27,16 @@ public slots:
void save();
void savedata();
void savedata(QString);
void loaddata(QString);
void off();
signals:
void signalsendimg(cv::Mat);
void signalNewFrame(double);
private:
@ -55,6 +60,8 @@ private: @@ -55,6 +60,8 @@ private:
int n_save;
};
#endif // MULTIPOINT_H

1
twopoint.h

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

8
usbcontrol.cpp

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

Loading…
Cancel
Save