You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1507 lines
43 KiB
1507 lines
43 KiB
#include "mainwindow.h" |
|
#include "./ui_mainwindow.h" |
|
|
|
#include <QDateTime> |
|
#include <QDesktopServices> |
|
#include <QDebug> |
|
|
|
#define ddd qDebug()<<__LINE__<<__FUNCTION__ |
|
|
|
MainWindow::MainWindow(QWidget *parent) |
|
: QMainWindow(parent) |
|
, ui(new Ui::MainWindow) |
|
{ |
|
ui->setupUi(this); |
|
|
|
initIns(); |
|
ddd; |
|
|
|
initUI(); |
|
ddd; |
|
|
|
initConnect(); |
|
ddd; |
|
|
|
|
|
//#if CLIENT==1 |
|
hideui(); |
|
//#endif |
|
|
|
|
|
|
|
on_comboBox_currentIndexChanged(0); |
|
|
|
drawbackground(); |
|
} |
|
|
|
|
|
|
|
void MainWindow::drawbackground() |
|
{ |
|
curimage = QPixmap(cols+100,rows+100); |
|
QPainter painter(&curimage); |
|
QPen pen(QColor(12,134,156)); |
|
pen.setWidth(2); |
|
painter.setPen(pen); |
|
painter.drawLine(50-3,50-3,50-3,rows+50); |
|
painter.drawLine(50-3,50-3,cols+50,50-3); |
|
painter.drawText(40,40,QString(u8"0")); |
|
|
|
for(int i = 50;i<=rows;i+=50){ |
|
painter.drawText(20,50+i,QString::number(i)); |
|
painter.drawLine(50-3,50+i,50-3-2,50+i); |
|
} |
|
for(int j = 50;j<=cols;j+=50){ |
|
painter.drawText(50+j,40,QString::number(j)); |
|
painter.drawLine(50+j,50-3,50+j,50-3-2); |
|
|
|
} |
|
ddd<<ui->scrollArea->size()<<" "<<ui->imagelabel->size(); |
|
ui->imagelabel->resize((cols+100)*imagerate,(rows+100)*imagerate); |
|
ui->scrollAreaWidgetContents->setMinimumHeight(((rows+100)*imagerate+1>ui->scrollArea->height()-8)?((rows+100)*imagerate+1):(ui->scrollArea->height()-8)); |
|
ui->scrollAreaWidgetContents->setMinimumWidth(((cols+100)*imagerate+1>ui->scrollArea->width()-8)?((cols+100)*imagerate+1):(ui->scrollArea->width()-8)); |
|
// if(cols+100>ui->scrollAreaWidgetContents->height() ) |
|
|
|
ddd<<ui->scrollArea->size()<<" "<<ui->scrollAreaWidgetContents->size()<<" "<<ui->imagelabel->size(); |
|
|
|
if(ui->imagelabel->width()<ui->scrollArea->width() || ui->imagelabel->height()<ui->scrollArea->height()){ |
|
ui->imagelabel->move((ui->scrollArea->width()-ui->imagelabel->width())/2,(ui->scrollArea->height()-ui->imagelabel->height())/2); |
|
// ui->imagelabel->move(100,100); |
|
ddd; |
|
} |
|
else{ |
|
ui->imagelabel->move(0,0); |
|
} |
|
// ui->imagelabel->setPixmap(curimage.scaled(curimage.size()*imagerate)); |
|
// curimage.save("wtf.bmp"); |
|
} |
|
|
|
MainWindow::~MainWindow() |
|
{ |
|
delete ui; |
|
} |
|
|
|
void MainWindow::initUI() |
|
{ |
|
|
|
b_af = false; |
|
b_stat = true; |
|
ui->pushButton_3->setChecked(true); |
|
imageX = -10; |
|
imageY = -10; |
|
flip0 = false; |
|
flip1 = false; |
|
savevideo = false; |
|
savebin = false; |
|
savesbin = false; |
|
shotimg = false; |
|
shotbin = false; |
|
b_bp = false; |
|
fps = 0; |
|
fpscount = 0; |
|
path = QDir::homePath()+"/zxrcfiles/"; |
|
|
|
|
|
b_noise = false; |
|
n_noise = -1; |
|
v_noise.clear(); |
|
|
|
ddd<<path; |
|
QDir d; |
|
d.mkdir(path); |
|
|
|
ui->spinBox->setEnabled(false); |
|
ui->spinBox_2->setEnabled(false); |
|
|
|
QSettings st(path+"dir.ini",QSettings::IniFormat); |
|
if(st.value("path").toString() == ""){ |
|
|
|
} |
|
else{ |
|
path = st.value("path").toString()+"/"; |
|
} |
|
ddd<<path; |
|
|
|
QString title = QString::fromLocal8Bit("BIT测试系统"); |
|
#if CLIENT==0 |
|
title +="SA"; |
|
ui->centralwidget->setStyleSheet("background-color:rgb(230,240,250);"); |
|
|
|
#else |
|
// title +="PC"; |
|
resize(960,800); |
|
// ui->centralwidget->setStyleSheet("background-color:rgb(250,240,230);"); |
|
|
|
#endif |
|
setWindowTitle(title+ QString(ProjectVersion)); |
|
|
|
// setWindowIcon(QIcon("logo.ico")); |
|
|
|
ui->splitter->setCollapsible(1,false); |
|
|
|
// QHBoxLayout lout = QHBoxLayout(); |
|
|
|
ui->toolBar->addWidget(ui->pushButton); |
|
ui->toolBar->addWidget(ui->pushButton_2); |
|
ui->toolBar->addWidget(ui->label_12); |
|
ui->toolBar->addWidget(ui->comboBox); |
|
ui->toolBar->addWidget(ui->label_2); |
|
ui->toolBar->addWidget(ui->spinBox); |
|
ui->toolBar->addWidget(ui->label_3); |
|
ui->toolBar->addWidget(ui->spinBox_2); |
|
// ui->toolBar->addWidget(ui->pushButton_13); |
|
|
|
|
|
m1 = new menu1(); |
|
m2 = new menu2(); |
|
m3 = new menu3(); |
|
m4 = new menu4(); |
|
ddd; |
|
|
|
m5 = new menu5(); |
|
m5_1 = new menu5_1(); |
|
ddd; |
|
|
|
ui->toolbox->addItem(m1,u8"相机设置"); |
|
|
|
#if CLIENT==2 |
|
ui->toolbox->addItem(m5,u8"图像校正"); |
|
#endif |
|
ui->toolbox->addItem(m2,u8"算法设置"); |
|
ui->toolbox->addItem(m3,u8"显示设置"); |
|
ui->toolbox->addItem(m4,u8"保存设置"); |
|
ddd; |
|
|
|
|
|
|
|
#if CLIENT==0 |
|
// ui->toolbox->addItem(m5_1,u8"多点校正"); |
|
#endif |
|
|
|
|
|
|
|
|
|
#if CLIENT==2 |
|
menu6* m6 = new menu6; |
|
menu7* m7 = new menu7; |
|
|
|
ptest = new TogglePushButton(u8"打开测试系统"); |
|
ui->toolbox->addItem(ptest,u8"测试系统"); |
|
connect(ptest,&TogglePushButton::clicked,[=](){ |
|
if(ptest->isChecked()) { |
|
m7->show(); |
|
} |
|
else{ |
|
m7->hide(); |
|
} |
|
}); |
|
// ui->toolBar->addWidget(ptest); |
|
|
|
// ui->toolbox->addItem(m6, u8"测温设置"); |
|
// ui->toolbox->addItem(m7,u8"测试系统"); |
|
connect(m6,&menu6::signalSetTemp,[=](double temp){ |
|
b_temp_save = true; |
|
d_temp = temp; |
|
}); |
|
connect(m6,&menu6::signalTurnTemp,[=](bool b){ |
|
b_temp = b; |
|
}); |
|
connect(m7,SIGNAL(signaltest(QStringList)),dthread,SLOT(gendoc(QStringList))); |
|
connect(m7,SIGNAL(signallowtemp(QString)),this,SLOT(slotsavelow(QString))); |
|
connect(m7,SIGNAL(signalhightemp(QString)),this,SLOT(slotsavehigh(QString))); |
|
|
|
#endif |
|
|
|
type = gray16; |
|
rows = ui->spinBox->value(); |
|
cols = ui->spinBox_2->value(); |
|
ddd; |
|
bpimg = cv::Mat(rows,cols,CV_8UC1); |
|
memset(bpimg.data,0,rows*cols); |
|
|
|
ui->scrollAreaWidgetContents->setMinimumSize(cols+20,rows+20); |
|
ui->imagelabel->resize(cols,rows); |
|
ddd; |
|
|
|
if(m_mp != nullptr) |
|
m_mp->setparas(rows,cols); |
|
ddd; |
|
|
|
ui->tableWidget->horizontalHeader()->hide(); |
|
ui->tableWidget->verticalHeader()->hide(); |
|
ui->tableWidget->setRowCount(5); |
|
ui->tableWidget->setColumnCount(5); |
|
ui->tableWidget->resizeColumnsToContents(); |
|
ui->tableWidget->resizeRowsToContents(); |
|
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); |
|
ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); |
|
ui->imagelabel->installEventFilter(this); |
|
|
|
lfps = new QLabel; |
|
lpath = new HyperlinkLabel; |
|
lpath->setText(QString::fromLocal8Bit("当前保存路径为")+path); |
|
lpath->setUrl(QUrl(path)); |
|
// ui->statusbar->addWidget(lfps); |
|
ui->toolBar->addWidget(lfps); |
|
ui->statusbar->addWidget(lpath); |
|
ddd; |
|
|
|
b_con = false; |
|
d_con = 1; |
|
d_con_bright = 0; |
|
|
|
ddd; |
|
|
|
ui->imagelabel->setWindowFlags(Qt::SubWindow); |
|
ui->imagelabel->showNormal(); |
|
ui->imagelabel->setAlignment(Qt::AlignLeft|Qt::AlignTop); |
|
} |
|
|
|
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(signalsetspname(QString)),ucontrol,SLOT(slotsetspname(QString))); |
|
connect(m1,&menu1::signalsetIT,[this](double it){ |
|
this->d_it = it; |
|
|
|
if(m_mp!=nullptr){ |
|
ddd<<this->deviceid<<it; |
|
// m_mp->loaddata(this->deviceid,it); |
|
m_mp->setit(it); |
|
} |
|
}); |
|
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); |
|
} |
|
}); |
|
|
|
connect(usb,SIGNAL(signalGetImage(cv::Mat)),m_af,SLOT(slotprocimg(cv::Mat))); |
|
connect(m_af,&autoFlash::signalSetIT,[=](double it){ |
|
if(b_af) |
|
if(d_it -it >0 && d_it-it<=10){ |
|
ucontrol->setIT(d_it-it); |
|
d_it -=it; |
|
if(m_mp!=nullptr){ |
|
// ddd<<this->deviceid<<it; |
|
// m_mp->loaddata(this->deviceid,it); |
|
m_mp->setit(d_it); |
|
} |
|
} |
|
}); |
|
|
|
|
|
connect(usb,SIGNAL(signalGetImage(cv::Mat)),this,SLOT(slotnoise(cv::Mat))); |
|
|
|
|
|
#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())); |
|
connect(m1,SIGNAL(signalsavek()),ucontrol,SLOT(savek())); |
|
connect(m1,SIGNAL(signalopenk(bool)),ucontrol,SLOT(openk(bool))); |
|
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(signalsetge(bool)),ucontrol,SLOT(setge(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))); |
|
|
|
#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))); |
|
|
|
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); |
|
}); |
|
|
|
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(m5,&menu5::signalsavedata,[=](QString path){ |
|
m_mp->savedata(path,d_it ); |
|
}); |
|
|
|
connect(m5,SIGNAL(signalrmbld(bool)),m_mp,SLOT(setrmblk(bool))); |
|
connect(m5,SIGNAL(signalthre(double)),m_mp,SLOT(slotSetThre(double))); |
|
|
|
|
|
connect(m_mp,SIGNAL(signalNewFrame(double)),m5,SLOT(slotRefresh(double))); |
|
// connect(m5,SIGNAL(signalloaddata(QString)),m_mp,SLOT(loaddata(QString))); |
|
connect(m5,&menu5::signalloaddata,[this](QString path){ |
|
// m_mp->loaddata(path,this->d_it); |
|
this->deviceid = path; |
|
m_mp->enable = true; |
|
m_mp->setdevice(path); |
|
|
|
// m_mp->loaddata(); |
|
}); |
|
connect(m5,SIGNAL(signaloff()),m_mp,SLOT(off())); |
|
connect(m_mp,SIGNAL(signalLog(QString)),this,SLOT(slotlogtext(QString))); |
|
#endif |
|
|
|
#if CLIENT==0 |
|
connect(m5_1,&menu5_1::signalSetbase,[=](int index){ |
|
slotlogtext(u8"开始保存第"+QString::number(index)+u8"个背景"); |
|
mpidx = index; |
|
mpsum = 0; |
|
mpnum = 16; |
|
}); |
|
|
|
connect(m5_1,&menu5_1::signalFlash,[=](int index){ |
|
ucontrol->mpflash(index); |
|
}); |
|
connect(m5_1,&menu5_1::signalStatus,[=](bool b){ |
|
ucontrol->mpstatus(b); |
|
}); |
|
connect(m5_1,&menu5_1::signalPop,[=](int index){ |
|
ucontrol->mppop(index); |
|
}); |
|
|
|
connect(m5_1,&menu5_1::signalscratch,[=](int* value){ |
|
for(int i = 0;i<5;i++){ |
|
ucontrol->mpset1(i+1,value[i]); |
|
} |
|
}); |
|
#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; |
|
}); |
|
connect(m3,&menu3::signalflip1,[=](bool b){ |
|
flip1 = b; |
|
}); |
|
connect(m3,&menu3::signalturnl,[=](){ |
|
turnl = true; |
|
turnf = false; |
|
turnr = false; |
|
}); |
|
connect(m3,&menu3::signalturnf,[=](){ |
|
turnl = false; |
|
turnf = true; |
|
turnr = false; |
|
}); |
|
connect(m3,&menu3::signalturnr,[=](){ |
|
turnl = false; |
|
turnf = false; |
|
turnr = true; |
|
}); |
|
|
|
connect(m3,&menu3::signalcolorgray,[=](){ |
|
colortype =0;//gray |
|
}); |
|
connect(m3,&menu3::signalcolorsub,[=](){ |
|
colortype = 1;//sub |
|
}); |
|
connect(m3,&menu3::signalcolorrgb,[=](){ |
|
colortype = 2; |
|
}); |
|
qDebug()<<__LINE__; |
|
|
|
|
|
connect(m4,&menu4::signalsetdir,[=](QString dir){ |
|
if(dir == ""){ |
|
// path = QApplication::applicationDirPath()+"/"; |
|
} |
|
else{ |
|
path = dir+"/"; |
|
QSettings st(QDir::homePath()+"/zxrcfiles/dir.ini",QSettings::IniFormat); |
|
st.setValue("path",path); |
|
|
|
} |
|
lpath->setText(QString::fromLocal8Bit("当前保存路径为")+path); |
|
lpath->setUrl(QUrl(path)); |
|
|
|
}); |
|
|
|
connect(m4,&menu4::signalshotimg,[=](){ |
|
shotimg = true; |
|
}); |
|
connect(m4,&menu4::signalshotbin,[=](){ |
|
shotbin = true; |
|
}); |
|
|
|
|
|
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); |
|
QString msg = now +QString::fromLocal8Bit( "开始保存视频"); |
|
slotlogtext(msg); |
|
savevideo =true; |
|
} |
|
else{ |
|
if(!savevideo) |
|
return; |
|
savevideo = false; |
|
writer->release(); |
|
QDateTime t = QDateTime::currentDateTime(); |
|
QString msg = t.toString() +QString::fromLocal8Bit( "结束保存视频"); |
|
slotlogtext(msg); |
|
} |
|
}); |
|
connect(m4,&menu4::signalsavebin,[=](bool b){ |
|
if(b){ |
|
QString now = QDateTime::currentDateTime().toString("/yyyy-MM-dd-hh-mm-ss"); |
|
QString filename = path+now; |
|
if(type == gray8) |
|
filename += "8bit.bin"; |
|
else if(type == gray16) |
|
filename += "14bit.bin"; |
|
purefile = new QFile(filename); |
|
purefile->open(QIODevice::ReadWrite); |
|
savebin = true; |
|
QString msg = now +QString::fromLocal8Bit( "开始保存数据"); |
|
slotlogtext(msg); |
|
} |
|
else{ |
|
savebin = false; |
|
purefile->close(); |
|
QString now = QDateTime::currentDateTime().toString("/yyyy-MM-dd-hh-mm-ss"); |
|
QString msg = now +QString::fromLocal8Bit( "结束保存数据"); |
|
slotlogtext(msg); |
|
} |
|
}); |
|
|
|
|
|
connect(m4,&menu4::signalsavesbin,[=](int frames){ |
|
if(savesbin) |
|
return; |
|
QString now = QDateTime::currentDateTime().toString("/yyyy-MM-dd-hh-mm-ss"); |
|
QString filename = path+now; |
|
if(type == gray8) |
|
filename += "8bit.bin"; |
|
else if(type == gray16) |
|
filename += "14bit.bin"; |
|
spurefile = new QFile(filename); |
|
spurefile->open(QIODevice::ReadWrite); sbinnum = frames; |
|
savesbin = true; |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
connect(lpath,&QPushButton::clicked,[=](){ |
|
QDesktopServices::openUrl(QUrl::fromLocalFile(path)); |
|
}); |
|
|
|
} |
|
|
|
void MainWindow::hideui() |
|
{ |
|
m1->hideui(); |
|
m2->hideui(); |
|
|
|
// ui->pushButton_10->hide();//测试 |
|
|
|
/// |
|
/// |
|
/// |
|
|
|
ui->pushButton_4->hide(); |
|
ui->pushButton_5->hide(); |
|
ui->pushButton_6->hide(); |
|
ui->pushButton_7->hide(); |
|
ui->pushButton_8->hide(); |
|
ui->pushButton_9->hide(); |
|
ui->pushButton_10->hide(); |
|
ui->pushButton_11->hide(); |
|
ui->pushButton_12->hide(); |
|
ui->pushButton_13->hide(); |
|
ui->pushButton_14->hide(); |
|
ui->pushButton_15->hide(); |
|
|
|
ui->spinBox_4->hide(); |
|
ui->spinBox_3->hide(); |
|
ui->lineEdit_9->hide(); |
|
ui->lineEdit_10->hide(); |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_clicked()// 开启传输 |
|
{ |
|
if(ui->pushButton->isChecked()){ |
|
ui->spinBox->setEnabled(false); |
|
ui->spinBox_2->setEnabled(false); |
|
QTimer *t = new QTimer; |
|
connect(t,&QTimer::timeout,[=](){ |
|
on_pushButton_2_clicked(); |
|
usb->SetImageInfo(type,rows,cols); |
|
if(ui->comboBox->currentIndex() == 0){ |
|
usb->settest(); |
|
} |
|
usb->setStatu(true); |
|
usb->start(); |
|
ui->pushButton->setText(u8"停止传输"); |
|
t->stop(); |
|
ucontrol->setIT(5.00); |
|
on_pushButton_2_clicked(); |
|
d_it = 5.00; |
|
}); |
|
t->start(2000); |
|
ui->imagelabel->setText(QString::fromLocal8Bit("开启传输中,请等待")); |
|
} |
|
else{ |
|
ui->spinBox->setEnabled(true); |
|
ui->spinBox_2->setEnabled(true); |
|
usb->setStatu(false); |
|
usb->stopProcessData(); |
|
ui->pushButton->setText(u8"开始传输"); |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_2_clicked() |
|
{ |
|
// ucontrol->bit14(true); |
|
|
|
// usb->SetImageInfo(type,rows,cols); |
|
|
|
m1->opentec(); |
|
ucontrol->tec(true); |
|
|
|
|
|
#if CLIENT == 0 || CLIENT == 1 |
|
ucontrol->setIT(5.0); |
|
ucontrol->setGPOL(800); |
|
// ucontrol->openk(true); |
|
// ucontrol->openb(true); |
|
|
|
|
|
|
|
|
|
#elif CLIENT == 2 |
|
|
|
|
|
ucontrol->openk(false); |
|
ucontrol->openb(false); |
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_3_clicked() |
|
{ |
|
b_stat = ui->pushButton_3->isChecked(); |
|
if(b_stat){ |
|
ui->pushButton_3->setText(u8"暂停统计"); |
|
} |
|
else{ |
|
ui->pushButton_3->setText(u8"开始统计"); |
|
} |
|
|
|
} |
|
|
|
void MainWindow::slotShowImage(cv::Mat img) |
|
{ |
|
|
|
if(savelowtemp | savehightemp){ |
|
if(lowcount>0){ |
|
lowcount--; |
|
tf->write((char*)img.data,img.total()*img.elemSize()); |
|
tf->flush(); |
|
if(lowcount ==0){ |
|
savelowtemp = false; |
|
tf->close(); |
|
slotlogtext(u8"保存测试用低温背景完成"); |
|
} |
|
} |
|
else{ |
|
highcount--; |
|
tf->write((char*)img.data,img.total()*img.elemSize()); |
|
tf->flush(); |
|
if(highcount ==0){ |
|
savehightemp = false; |
|
tf->close(); |
|
slotlogtext(u8"保存测试用高温背景完成"); |
|
} |
|
} |
|
} |
|
|
|
|
|
fpscount +=1; |
|
if(flip0){ |
|
cv::flip(img,img,0); |
|
} |
|
|
|
if(flip1){ |
|
cv::flip(img,img,1); |
|
} |
|
|
|
|
|
if(savebin){ |
|
purefile->write((char*)img.data,img.total()*img.elemSize()); |
|
purefile->flush(); |
|
} |
|
|
|
if(savesbin){ |
|
if(sbinnum>0){ |
|
spurefile->write((char*)img.data,img.total()*img.elemSize()); |
|
spurefile->flush(); |
|
} |
|
sbinnum -=1; |
|
|
|
|
|
if(sbinnum == 0){ |
|
spurefile->close(); |
|
savesbin = false; |
|
} |
|
} |
|
|
|
|
|
if(b_temp_save){ |
|
m_temp[img.at<ushort>(imageY,imageX)/4] = d_temp; |
|
b_temp_save = false; |
|
} |
|
|
|
|
|
|
|
|
|
if(b_con && (!b_temp)){ |
|
cv::Mat image; |
|
|
|
|
|
img.convertTo(image,CV_32SC1); |
|
|
|
double avg = cv::mean(image).val[0]; |
|
|
|
cv::Mat dst = cv::Mat(rows,cols,CV_16UC1); |
|
|
|
int s,d; |
|
|
|
for(int i = 0;i<image.rows;i++){ |
|
for (int j = 0; j< image.cols;j++){ |
|
s = image.at<int>(i,j) - avg; |
|
d = s*d_con+avg+d_con_bright; |
|
if(d<0)d = 0; |
|
if(d>65535) d = 65535; |
|
dst.at<ushort>(i,j) = d; |
|
} |
|
} |
|
img = dst; |
|
} |
|
|
|
if(b_bp){ |
|
for(int i = 0;i< rows;i++){ |
|
for(int j = 0;j<cols;j++){ |
|
if(bpimg.at<uchar>(i,j) == 1){ |
|
int n = 8- (bpimg.at<uchar>(i+1,j)+ |
|
bpimg.at<uchar>(i-1,j)+ |
|
bpimg.at<uchar>(i+1,j-1)+ |
|
bpimg.at<uchar>(i-1,j-1)+ |
|
bpimg.at<uchar>(i+1,j+1)+ |
|
bpimg.at<uchar>(i-1,j+1)+ |
|
bpimg.at<uchar>(i,j+1)+ |
|
bpimg.at<uchar>(i,j-1)); |
|
int sum = (1-bpimg.at<uchar>(i+1,j))*img.at<ushort>(i+1,j)+ |
|
(1-bpimg.at<uchar>(i-1,j))*img.at<ushort>(i-1,j)+ |
|
(1-bpimg.at<uchar>(i+1,j+1))*img.at<ushort>(i+1,j+1)+ |
|
(1-bpimg.at<uchar>(i-1,j+1))*img.at<ushort>(i-1,j+1)+ |
|
(1-bpimg.at<uchar>(i+1,j-1))*img.at<ushort>(i+1,j-1)+ |
|
(1-bpimg.at<uchar>(i-1,j-1))*img.at<ushort>(i-1,j-1)+ |
|
(1-bpimg.at<uchar>(i,j+1))*img.at<ushort>(i,j+1)+ |
|
(1-bpimg.at<uchar>(i,j-1))*img.at<ushort>(i,j-1); |
|
if(n>0) |
|
img.at<ushort>(i,j) = sum/n; |
|
else img.at<ushort>(i,j) = 0; |
|
} |
|
} |
|
} |
|
} |
|
|
|
if(b_stat ){ |
|
if(img.type() == CV_16UC1) |
|
lastimage = img/4; |
|
else |
|
lastimage = img; |
|
|
|
if( imageX>=0 && imageX<img.cols && imageY>=0 && imageY< img.rows){ |
|
int r = 2; |
|
int lmask[25] = {0}; |
|
int ldata[25] = {0}; |
|
for (int i = -r;i<=r;i++){ |
|
for (int j = -r;j<=r;j++){ |
|
int row = i+imageY; |
|
int col = j+imageX; |
|
if(row<0 || row>=lastimage.rows|| col<0 || col>=lastimage.cols){ |
|
ui->tableWidget->setItem(i+r,j+r,new QTableWidgetItem()); |
|
|
|
} |
|
else{ |
|
lmask[(i+r)*(2*r+1)+(j+r)] = 1; |
|
if(lastimage.type() == CV_16UC1){ |
|
|
|
QTableWidgetItem *item; |
|
if(b_temp && m_temp.size()>2){ |
|
double t0 = lastimage.at<ushort>(row,col); |
|
QList<double> temps = m_temp.keys(); |
|
int len = temps.size(); |
|
if(t0<temps[1]) |
|
t0 = (t0-temps[0])/(temps[1]-temps[0])*(m_temp[temps[1]]-m_temp[temps[0]]) + m_temp[temps[0]]; |
|
else if(t0>temps[temps.size()-2]){ |
|
t0 = (t0-temps[len-2])/(temps[len-1]-temps[len-2])*(m_temp[temps[len-1]]-m_temp[temps[len-2]]) + m_temp[temps[len-2]]; |
|
} |
|
else for(int k = 0;k<temps.size()-1;k++){ |
|
if(t0>temps[k] && t0<temps[k+1]) |
|
t0 = (t0-temps[k])/(temps[k+1]-temps[k])*(m_temp[temps[k+1]]-m_temp[temps[k]]) + m_temp[temps[k]]; |
|
} |
|
|
|
item= new QTableWidgetItem(QString::number(t0)); |
|
} |
|
else |
|
item= new QTableWidgetItem(QString::number(lastimage.at<ushort>(row,col))); |
|
int gray = lastimage.at<ushort>(row,col)/64/2+64; |
|
item->setBackground(QColor(gray,gray,gray)); |
|
ui->tableWidget->setItem(i+r,j+r,item); |
|
ldata[(i+r)*(2*r+1)+(j+r)] = lastimage.at<ushort>(row,col); |
|
} |
|
else{ |
|
QTableWidgetItem *item = new QTableWidgetItem(QString::number(lastimage.at<uchar>(row,col))); |
|
int gray = lastimage.at<uchar>(row,col)/2+64; |
|
item->setBackground(QColor(gray,gray,gray)); |
|
ui->tableWidget->setItem(i+r,j+r,item); |
|
ldata[(i+r)*(2*r+1)+(j+r)] = lastimage.at<uchar>(row,col); |
|
} |
|
|
|
} |
|
} |
|
} |
|
double sum = 0; |
|
double msum = 0; |
|
double sum2 = 0; |
|
|
|
for(int i = 0; i< 25;i++){ |
|
sum+= lmask[i]*ldata[i]; |
|
msum += lmask[i]; |
|
sum2 += lmask[i]*ldata[i]*ldata[i]; |
|
} |
|
if(msum!=0){ |
|
double avg = sum/msum; |
|
double SIGMA = sum2/msum - avg*avg; |
|
double sigma = sqrt(SIGMA); |
|
ui->lineEdit->setText(QString::number(imageX)); |
|
ui->lineEdit_2->setText(QString::number(imageY)); |
|
ui->lineEdit_3->setText(QString::number(avg,'f',2)); |
|
ui->lineEdit_4->setText(QString::number(sigma,'f',2)); |
|
} |
|
} |
|
else{ |
|
ui->lineEdit->setText(""); |
|
ui->lineEdit_2->setText(""); |
|
ui->lineEdit_3->setText(""); |
|
ui->lineEdit_4->setText(""); |
|
} |
|
|
|
int lows = 0; |
|
int highs = 0; |
|
double sum = 0; |
|
double sum2 = 0; |
|
double sigma = 0; |
|
|
|
if(lastimage.type() == CV_16UC1){ |
|
for(int i = 0;i<lastimage.rows;i++){ |
|
for(int j = 0; j<lastimage.cols;j++){ |
|
int temp; |
|
temp =lastimage.at<ushort>(i,j); |
|
if(temp == 0){ |
|
lows+=1; |
|
} |
|
if(temp >= 16383){ |
|
highs +=1; |
|
} |
|
sum += temp; |
|
sum2+=temp*temp; |
|
} |
|
} |
|
} |
|
else{ |
|
for(int i = 0;i<lastimage.rows;i++){ |
|
for(int j = 0; j<lastimage.cols;j++){ |
|
int temp; |
|
temp =lastimage.at<uchar>(i,j); |
|
sum += temp; |
|
sum2+=temp*temp; |
|
} |
|
} |
|
} |
|
int avg = sum/rows/cols; |
|
sigma = sqrt( sum2/rows/cols -avg*avg); |
|
|
|
if(mpnum>0){ |
|
mpsum += avg; |
|
if(mpnum == 1){ |
|
mpsum = mpsum/16; |
|
ucontrol->mpset(mpidx,mpsum); |
|
m5_1->slotGetavg(mpsum); |
|
} |
|
mpnum --; |
|
} |
|
|
|
if(lastimage.type() == CV_16UC1){ |
|
ui->lineEdit_5->setText(QString::number(lows)); |
|
ui->lineEdit_6->setText(QString::number(highs)); |
|
} |
|
else{ |
|
ui->lineEdit_5->setText(""); |
|
ui->lineEdit_6->setText(""); |
|
} |
|
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.0); |
|
} |
|
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.toLocal8Bit().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); |
|
// if(b_testmode) |
|
// { |
|
// writer->write(img); |
|
// writer->write(img); |
|
// } |
|
} |
|
|
|
|
|
|
|
if(b_stat &(!b_fullscreen) &(!ui->pushButton_13->isChecked())){ |
|
QPainter p(&pix); |
|
QPen pen = p.pen(); |
|
QPen npen(QColor(0xad,0x14,0x53)); |
|
npen.setWidth(4); |
|
p.setPen(npen); |
|
if(imageX>=0 && imageX<img.cols && imageY>=0 && imageY< img.rows){ |
|
p.drawLine(imageX-10,imageY,imageX+10,imageY); |
|
p.drawLine(imageX,imageY-10,imageX,imageY+10); |
|
} |
|
p.setPen(pen); |
|
} |
|
if(b_fullscreen) |
|
ui->imagelabel->setPixmap(pix.scaled(ui->imagelabel->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation)); |
|
else |
|
{ |
|
QPainter painter(&curimage); |
|
painter.drawPixmap(50,50,pix); |
|
ui->imagelabel->setPixmap(curimage.scaled(curimage.size()*imagerate)); |
|
|
|
// if(ui->pushButton_13->isChecked()){ |
|
// if(ui->scrollArea->size() - QSize(20,20) != ui->imagelabel->size()){ |
|
// ui->imagelabel->resize(ui->scrollArea->size() - QSize(30,30)); |
|
// ui->imagelabel->move(10,10); |
|
// ui->imagelabel->setAlignment(Qt::AlignLeft|Qt::AlignTop); |
|
|
|
// } |
|
// ui->imagelabel->setPixmap(pix.scaled(ui->scrollArea->size() - QSize(30,30),Qt::KeepAspectRatio,Qt::SmoothTransformation)); |
|
|
|
// } |
|
// else{ |
|
// if(ui->imagelabel->size() != QSize(cols,rows)){ |
|
// ui->imagelabel->resize(cols,rows); |
|
// ui->imagelabel->move(10,10); |
|
// ui->imagelabel->setAlignment(Qt::AlignLeft|Qt::AlignTop); |
|
|
|
// } |
|
// ui->imagelabel->setPixmap(pix); |
|
// } |
|
} |
|
} |
|
|
|
void MainWindow::slotlogtext(QString msg) |
|
{ |
|
ui->textBrowser->append(msg); |
|
} |
|
|
|
void MainWindow::slotlogstatus() |
|
{ |
|
|
|
|
|
lfps->setText(QString::fromLocal8Bit("当前帧率为")+QString::number(fps)); |
|
|
|
|
|
} |
|
|
|
void MainWindow::slotsavelow(QString id) |
|
{ |
|
if(savelowtemp || savehightemp){ |
|
slotlogtext(u8"正在保存背景数据"); |
|
return; |
|
} |
|
QDir d; |
|
if(!d.exists("reportGen/"+id)) |
|
if(! d.mkdir("reportGen/"+id)){ |
|
slotlogtext(u8"无法新建数据文件夹, 请重新安装软件, 注意安装路径的权限问题"); |
|
} |
|
lowfilename ="low"+ QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_ss")+".bin"; |
|
tf = new QFile("reportGen/"+id+"/"+lowfilename); |
|
tf->open(QIODevice::ReadWrite); |
|
lowcount =100; |
|
savelowtemp = true; |
|
dthread->slotsetlow(lowfilename); |
|
} |
|
|
|
void MainWindow::slotsavehigh(QString id) |
|
{ |
|
if(savelowtemp || savehightemp){ |
|
slotlogtext(u8"正在保存背景数据"); |
|
return; |
|
} |
|
QDir d; |
|
if(!d.exists("reportGen/"+id)) |
|
if(! d.mkdir("reportGen/"+id)){ |
|
slotlogtext(u8"无法新建数据文件夹, 请重新安装软件, 注意安装路径的权限问题"); |
|
} |
|
highfilename ="high"+ QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_ss")+".bin"; |
|
tf = new QFile("reportGen/"+id+"/"+highfilename); |
|
tf->open(QIODevice::ReadWrite); |
|
highcount =100; |
|
savehightemp = true; |
|
dthread->slotsethigh(highfilename); |
|
} |
|
|
|
bool MainWindow::eventFilter(QObject *obj, QEvent *e) |
|
{ |
|
if(obj == ui->imagelabel && e->type() == QEvent::MouseButtonPress){ |
|
QMouseEvent* ev = static_cast<QMouseEvent*>(e); |
|
imageX = ev->x(); |
|
imageY =ev->y(); |
|
imageX = imageX/imagerate-50; |
|
imageY = imageY/imagerate-50; |
|
return true; |
|
} |
|
|
|
if(obj == ui->imagelabel && e->type()== QEvent::MouseButtonDblClick){ |
|
b_fullscreen = !b_fullscreen; |
|
if(b_fullscreen){ |
|
ui->imagelabel->setWindowFlag(Qt::Window); |
|
ui->imagelabel->showFullScreen(); |
|
ui->imagelabel->setAlignment(Qt::AlignHCenter); |
|
qDebug()<<__LINE__; |
|
} |
|
else{ |
|
ui->imagelabel->setWindowFlags(Qt::SubWindow); |
|
ui->imagelabel->showNormal(); |
|
ui->imagelabel->setAlignment(Qt::AlignLeft|Qt::AlignTop); |
|
ddd; |
|
} |
|
return true; |
|
} |
|
|
|
if( e->type() == QEvent::Wheel){ |
|
if(QApplication::keyboardModifiers() == Qt::Modifier::CTRL){ |
|
if(obj == ui->imagelabel){ |
|
imagerate += (static_cast<QWheelEvent*>(e)->delta()>0)?0.05:-0.05; |
|
|
|
// qDebug()<<"ok"<<imagerate; |
|
ddd<<ui->scrollArea->size()<<" "<<ui->imagelabel->size(); |
|
ui->imagelabel->resize((cols+100)*imagerate,(rows+100)*imagerate); |
|
ui->scrollAreaWidgetContents->setMinimumHeight(((rows+100)*imagerate+1>ui->scrollArea->height()-8)?((rows+100)*imagerate+1):(ui->scrollArea->height()-8)); |
|
ui->scrollAreaWidgetContents->setMinimumWidth(((cols+100)*imagerate+1>ui->scrollArea->width()-8)?((cols+100)*imagerate+1):(ui->scrollArea->width()-8)); |
|
// if(cols+100>ui->scrollAreaWidgetContents->height() ) |
|
|
|
ddd<<ui->scrollArea->size()<<" "<<ui->scrollAreaWidgetContents->size()<<" "<<ui->imagelabel->size(); |
|
|
|
if(ui->imagelabel->width()<ui->scrollArea->width() || ui->imagelabel->height()<ui->scrollArea->height()){ |
|
ui->imagelabel->move((ui->scrollArea->width()-ui->imagelabel->width())/2,(ui->scrollArea->height()-ui->imagelabel->height())/2); |
|
// ui->imagelabel->move(100,100); |
|
ddd; |
|
} |
|
else{ |
|
ui->imagelabel->move(0,0); |
|
} return true; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
void MainWindow::keyPressEvent(QKeyEvent *ev) |
|
{ |
|
|
|
if(ev->key() == Qt::Key_A){ |
|
imageX-=1; |
|
} |
|
if(ev->key() == Qt::Key_D){ |
|
imageX+=1; |
|
} |
|
if(ev->key() == Qt::Key_W){ |
|
imageY-=1; |
|
} |
|
if(ev->key() == Qt::Key_S){ |
|
imageY+=1; |
|
} |
|
|
|
if((ev->modifiers() == Qt::ControlModifier) && (ev->key()== Qt::Key_A)){ |
|
passwd* pswd = new passwd(); |
|
pswd->show(); |
|
connect(pswd,&QDialog::accepted,[=](){ |
|
// m1->showui(); |
|
if(m5!=nullptr) |
|
m5->showui(); |
|
m1->showui(); |
|
|
|
}); |
|
} |
|
if((ev->modifiers() == Qt::ControlModifier) && (ev->key()== Qt::Key_Q)){ |
|
// m1->hideui(); |
|
if(m5!=nullptr) |
|
m5->hideui(); |
|
m1->hideui(); |
|
} |
|
|
|
} |
|
|
|
void MainWindow::initIns() |
|
{ |
|
qRegisterMetaType<cv::Mat>("cv::Mat"); |
|
qRegisterMetaType<QVector<double>>("QVector<double>"); |
|
|
|
b_testmode =false; |
|
usb = new usbthread(); |
|
ucontrol = new usbcontrol(); |
|
|
|
m_af = new autoFlash(); |
|
imagerate = 1.0; |
|
|
|
QTimer* t = new QTimer(this); |
|
connect(t,&QTimer::timeout,[=](){ |
|
|
|
if(ui->comboBox->currentIndex() == 0 && fpscount>0) |
|
fps = int(fpscount*3.51) + (rand()%4); |
|
else |
|
fps = fpscount; |
|
fpscount = 0; |
|
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(); |
|
m_mp = new MultiPoint(); |
|
#else |
|
m_mp = nullptr; |
|
mpnum = 0; |
|
|
|
#endif |
|
|
|
b_temp = false; |
|
b_temp_save = false; |
|
QDir d; |
|
|
|
if(!d.exists("datas")) |
|
if(! d.mkdir("datas")){ |
|
slotlogtext(u8"无法新建数据文件夹, 请重新安装软件, 注意安装路径的权限问题"); |
|
} |
|
d.mkdir("files"); |
|
|
|
|
|
savelowtemp = false; |
|
savehightemp =false; |
|
lowcount = 0; |
|
highcount = 0; |
|
dthread = new docthread; |
|
} |
|
|
|
|
|
void MainWindow::on_spinBox_valueChanged(int arg1) |
|
{ |
|
rows = arg1; |
|
ui->scrollAreaWidgetContents->setMinimumHeight(rows+20); |
|
ui->imagelabel->resize(cols,rows); |
|
ui->imagelabel->move(10,10); |
|
ui->imagelabel->setAlignment(Qt::AlignLeft|Qt::AlignTop); |
|
|
|
qDebug()<<__LINE__<<ui->scrollArea->width()<<" "<<ui->scrollArea->height(); |
|
qDebug()<<ui->imagelabel->width()<<" "<<ui->imagelabel->height(); |
|
#if CLIENT==2 |
|
m_mp->setparas(rows,cols); |
|
|
|
#endif |
|
|
|
bpimg = cv::Mat(rows,cols,CV_8UC1); |
|
memset(bpimg.data,0,rows*cols); |
|
drawbackground(); |
|
|
|
} |
|
|
|
|
|
void MainWindow::on_spinBox_2_valueChanged(int arg1) |
|
{ |
|
cols = arg1; |
|
ui->scrollAreaWidgetContents->setMinimumWidth(cols+20); |
|
ui->imagelabel->resize(cols,rows); |
|
ui->imagelabel->move(10,10); |
|
ui->imagelabel->setAlignment(Qt::AlignLeft|Qt::AlignTop); |
|
|
|
#if CLIENT == 2 |
|
m_mp->setparas(rows,cols); |
|
#endif |
|
bpimg = cv::Mat(rows,cols,CV_8UC1); |
|
memset(bpimg.data,0,rows*cols); |
|
drawbackground(); |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_4_clicked()//标记为盲元 |
|
|
|
{ |
|
if( imageX>=0 && imageX<cols && imageY>=0 && imageY< rows){ |
|
bpimg.at<uchar>(imageY,imageX) = 1 ; |
|
} |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_5_clicked() //取消标记 |
|
{ |
|
if( imageX>=0 && imageX<cols && imageY>=0 && imageY< rows){ |
|
bpimg.at<uchar>(imageY,imageX) = 0 ; |
|
} |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_6_clicked() //打开盲元替换 |
|
{ |
|
b_bp = true; |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_7_clicked() //关闭盲元替换 |
|
{ |
|
b_bp = false; |
|
} |
|
|
|
#include <QFileDialog> |
|
void MainWindow::on_pushButton_8_clicked() |
|
{ |
|
if(!bpimg.empty()){ |
|
QString p = QFileDialog::getSaveFileName(nullptr,QString::fromLocal8Bit("保存盲元图"),path,"(*.bmp)"); |
|
if(!p.isEmpty()) |
|
cv::imwrite(p.toStdString(),bpimg); |
|
} |
|
/* |
|
QFile f(path+ QString::fromLocal8Bit("/盲元表.txt")); |
|
f.open(QIODevice::ReadWrite|QIODevice::Truncate); |
|
for(int i = 0;i<rows;i++){ |
|
for(int j = 0;j< cols; j++){ |
|
if(bpimg.at<uchar>(i,j) == 1){ |
|
QString msg = "rows:"+ QString::number(i)+",cols"+QString::number(j)+"\n"; |
|
f.write(msg.toUtf8()); |
|
} |
|
} |
|
} |
|
f.close(); |
|
*/ |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_9_clicked() |
|
{ |
|
QString p = QFileDialog::getOpenFileName(nullptr,QString::fromLocal8Bit("打开盲元图"),path,"(*.bmp)"); |
|
// cv::imwrite(p.toStdString(),bpimg); |
|
if(!p.isEmpty()) |
|
bpimg = cv::imread(p.toStdString()); |
|
} |
|
|
|
#include <QRandomGenerator64> |
|
|
|
void MainWindow::on_pushButton_10_clicked() |
|
{ |
|
if(n_noise<0){ |
|
b_noise = true; |
|
n_noise = ui->spinBox_4->value(); |
|
} |
|
else{ |
|
slotlogtext(u8"已经在执行计算时域噪声操作"); |
|
} |
|
} |
|
|
|
|
|
void MainWindow::on_comboBox_currentIndexChanged(int index) |
|
{ |
|
qDebug()<<"WTF"; |
|
switch (index) { |
|
case 0: |
|
rows = 2048; |
|
cols = 2560; |
|
ui->spinBox->setValue(2048); |
|
ui->spinBox_2->setValue(2560); |
|
ui->spinBox->setEnabled(false); |
|
ui->spinBox_2->setEnabled(false); |
|
dthread->settestmode(true); |
|
b_testmode =true; |
|
break; |
|
case 1: |
|
rows = 512; |
|
cols = 640; |
|
ui->spinBox->setValue(512); |
|
ui->spinBox_2->setValue(640); |
|
ui->spinBox->setEnabled(false); |
|
ui->spinBox_2->setEnabled(false); |
|
dthread->settestmode(false); |
|
b_testmode =false; |
|
// ui->label_2->setVisible(false); |
|
// ui->label_3->setVisible(false); |
|
break; |
|
case 2: |
|
rows = 1024; |
|
cols = 1280; |
|
ui->spinBox->setValue(1024); |
|
ui->spinBox_2->setValue(1280); |
|
ui->spinBox->setEnabled(false); |
|
ui->spinBox_2->setEnabled(false); |
|
dthread->settestmode(false); |
|
b_testmode = false; |
|
// ui->spinBox->setVisible(false); |
|
// ui->spinBox_2->setVisible(false); |
|
// ui->label_2->setVisible(false); |
|
// ui->label_3->setVisible(false); |
|
|
|
qDebug()<<2; |
|
break; |
|
case 3: |
|
dthread->settestmode(false); |
|
ui->spinBox->setEnabled(true); |
|
ui->spinBox_2->setEnabled(true); |
|
b_testmode =false; |
|
break; |
|
default: |
|
break; |
|
} |
|
|
|
drawbackground(); |
|
} |
|
|
|
|
|
void MainWindow::on_spinBox_3_valueChanged(int arg1) |
|
{ |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_11_clicked() |
|
{ |
|
m_af->slotsetshre(ui->spinBox_3->value()); |
|
|
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_12_clicked() |
|
{ |
|
b_af =!b_af; |
|
if(b_af){ |
|
slotlogtext(u8"开始自动曝光"); |
|
} |
|
else{ |
|
slotlogtext(u8"关闭自动曝光"); |
|
} |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_13_clicked() |
|
{ |
|
if(ui->pushButton_13->isChecked()){ |
|
ui->pushButton_13->setText(u8"适应屏幕"); |
|
} |
|
else{ |
|
ui->pushButton_13->setText(u8"原始大小"); |
|
} |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_14_clicked() |
|
{ |
|
ui->lineEdit_9->setText(usb->getid()); |
|
} |
|
|
|
|
|
void MainWindow::on_pushButton_15_clicked() |
|
{ |
|
ucontrol->setid(ui->lineEdit_10->text()); |
|
} |
|
|
|
void MainWindow::slotnoise(Mat src) |
|
{ |
|
if(n_noise>0){ |
|
cv::Mat tmp; |
|
src.convertTo(tmp,CV_64FC1); |
|
v_noise.push_back(tmp/4); |
|
n_noise --; |
|
// cv::imshow("tmp",tmp/65535.0); |
|
} |
|
if(n_noise == 0){ |
|
int n = v_noise.length(); |
|
qDebug()<<__LINE__<<"n = "<<n; |
|
cv::Mat s = cv::Mat::zeros(rows,cols,CV_64FC1); |
|
cv::Mat ss = cv::Mat::zeros(rows,cols,CV_64FC1); |
|
|
|
for(int i = 0;i<n;i++){ |
|
s += v_noise.at(i); |
|
} |
|
// cv::imwrite("s.tiff",s); |
|
s = s/n; |
|
// cv::imwrite("savg.tiff",s); |
|
for(int i = 0;i<n;i++){ |
|
cv::Mat temp = v_noise.at(i) - s; |
|
cv::Mat pow; |
|
cv::pow(temp,2,pow); |
|
ss += pow; |
|
} |
|
// s = s.mul(s); |
|
// cv::imwrite("s.tiff",s); |
|
cv::imwrite("ss.tiff",ss); |
|
cv::Mat noise; |
|
cv::sqrt( ss/(n-1),noise); |
|
slotlogtext( QDateTime::currentDateTime().toString() + u8"前"+QString::number(n)+u8"帧计算得到的均方根的平均值为" + QString::number(cv::mean(noise).val[0])); |
|
std::string filename = "noise"+ QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").toStdString()+".tiff"; |
|
cv::imwrite(filename,noise); |
|
n_noise = -1; |
|
v_noise.clear(); |
|
} |
|
} |
|
|
|
|