Browse Source

添加多点校正算法

master
zara 1 year ago
parent
commit
0d54c9c73c
  1. 2
      .gitignore
  2. 35
      CMakeLists.txt
  3. 8
      CMakeLists.txt.user
  4. BIN
      logo.ico
  5. 30
      mainwindow.cpp
  6. 14
      mainwindow.h
  7. 128
      mainwindow.ui
  8. 32
      menu5.cpp
  9. 33
      menu5.h
  10. 42
      menu5.ui
  11. 177
      multipoint.cpp
  12. 60
      multipoint.h
  13. 5
      readme.txt
  14. 100
      twopoint.cpp
  15. 28
      twopoint.h

2
.gitignore vendored

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
.vs/
out/

35
CMakeLists.txt

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.5)
set(PROJECT_VERSION 1.4.1.2)
set(PROJECT_VERSION 1.4.2.0)
add_definitions(-DProjectVersion=\"${PROJECT_VERSION}\")
project(zxrcClient VERSION ${PROJECT_VERSION} LANGUAGES CXX)
@ -76,6 +76,9 @@ set(PROJECT_SOURCES @@ -76,6 +76,9 @@ set(PROJECT_SOURCES
menu4.cpp
menu4.h
menu4.ui
menu5.cpp
menu5.h
menu5.ui
usbcontrol.cpp
usbcontrol.h
usbthread.cpp
@ -85,6 +88,8 @@ set(PROJECT_SOURCES @@ -85,6 +88,8 @@ set(PROJECT_SOURCES
datathread.h
qt5app.rc.in
${CMAKE_CURRENT_BINARY_DIR}/qt5app.rc
multipoint.cpp
multipoint.h
)
###
@ -93,13 +98,13 @@ set(PROJECT_SOURCES @@ -93,13 +98,13 @@ set(PROJECT_SOURCES
###1,
###2zxj02,.
add_executable (zxrcClient WIN32 ${PROJECT_SOURCES})
target_include_directories (zxrcClient PRIVATE ${INCLUDE_DIRS})
target_link_directories (zxrcClient PRIVATE ${LIB_DIRS})
target_link_libraries (zxrcClient PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries (zxrcClient PRIVATE QFluentWidgets::Widgets ${LIBS})
target_link_libraries (zxrcClient PRIVATE ${OpenCV_LIBS})
target_compile_definitions (zxrcClient PRIVATE CLIENT=0)
#add_executable (zxrcClient WIN32 ${PROJECT_SOURCES})
#target_include_directories (zxrcClient PRIVATE ${INCLUDE_DIRS})
#target_link_directories (zxrcClient PRIVATE ${LIB_DIRS})
#target_link_libraries (zxrcClient PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
#target_link_libraries (zxrcClient PRIVATE QFluentWidgets::Widgets ${LIBS})
#target_link_libraries (zxrcClient PRIVATE ${OpenCV_LIBS})
#target_compile_definitions (zxrcClient PRIVATE CLIENT=0)
#add_executable (zxrcClientSim WIN32 ${PROJECT_SOURCES})
@ -126,10 +131,10 @@ set(LOCALALGO @@ -126,10 +131,10 @@ set(LOCALALGO
twopoint.h
)
#add_executable (zxrcClientPC WIN32 ${LOCALALGO} ${PROJECT_SOURCES})
#target_include_directories (zxrcClientPC PRIVATE ${INCLUDE_DIRS})
#target_link_directories (zxrcClientPC PRIVATE ${LIB_DIRS})
#target_link_libraries (zxrcClientPC PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
#target_link_libraries (zxrcClientPC PRIVATE QFluentWidgets::Widgets ${LIBS})
#target_link_libraries (zxrcClientPC PRIVATE ${OpenCV_LIBS})
#target_compile_definitions (zxrcClientPC PRIVATE CLIENT=2)
add_executable (zxrcClientPC WIN32 ${LOCALALGO} ${PROJECT_SOURCES})
target_include_directories (zxrcClientPC PRIVATE ${INCLUDE_DIRS})
target_link_directories (zxrcClientPC PRIVATE ${LIB_DIRS})
target_link_libraries (zxrcClientPC PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries (zxrcClientPC PRIVATE QFluentWidgets::Widgets ${LIBS})
target_link_libraries (zxrcClientPC PRIVATE ${OpenCV_LIBS})
target_compile_definitions (zxrcClientPC PRIVATE CLIENT=2)

8
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-05-30T18:06:14. -->
<!-- Written by QtCreator 11.0.1, 2024-06-06T18:00:46. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@ -407,9 +407,9 @@ @@ -407,9 +407,9 @@
<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="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">zxrcClientPC</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.zxrcClientPC</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">zxrcClientPC</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>

BIN
logo.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 24 KiB

30
mainwindow.cpp

@ -62,10 +62,13 @@ void MainWindow::initUI() @@ -62,10 +62,13 @@ void MainWindow::initUI()
m3 = new menu3();
m4 = new menu4();
m5 = new menu5();
ui->toolbox->addItem(m1,u8"相机设置");
ui->toolbox->addItem(m2,u8"算法设置");
ui->toolbox->addItem(m3,u8"显示设置");
ui->toolbox->addItem(m4,u8"保存设置");
ui->toolbox->addItem(m5,u8"多点校正");
type = gray16;
rows = ui->spinBox->value();
@ -143,8 +146,11 @@ void MainWindow::initConnect() @@ -143,8 +146,11 @@ void MainWindow::initConnect()
///
///
#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_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)));
@ -338,6 +344,10 @@ void MainWindow::initConnect() @@ -338,6 +344,10 @@ 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));
});
@ -418,6 +428,9 @@ void MainWindow::on_pushButton_3_clicked() @@ -418,6 +428,9 @@ void MainWindow::on_pushButton_3_clicked()
void MainWindow::slotShowImage(cv::Mat img)
{
cv::Mat o;
cv::mean(img,o);
fpscount +=1;
if(flip0){
cv::flip(img,img,0);
@ -741,6 +754,7 @@ void MainWindow::initIns() @@ -741,6 +754,7 @@ void MainWindow::initIns()
m_sagauss = new sagauss();
m_tp = new twoPoint();
m_clhe = new clhe();
m_mp = new MultiPoint();
#endif
}
@ -761,3 +775,15 @@ void MainWindow::on_spinBox_2_valueChanged(int arg1) @@ -761,3 +775,15 @@ 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()
{
}

14
mainwindow.h

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
#include "menu2.h"
#include "menu3.h"
#include "menu4.h"
#include "menu5.h"
#include "usbcontrol.h"
#include "usbthread.h"
@ -20,8 +21,10 @@ @@ -20,8 +21,10 @@
#include "sagauss.h"
#include "twopoint.h"
#include "clhe.h"
#include "multipoint.h"
#include "qfluentwidgets"
#include <QMap>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
@ -64,6 +67,10 @@ private slots: @@ -64,6 +67,10 @@ private slots:
void on_spinBox_2_valueChanged(int arg1);
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
private:
void initIns();
void initUI();
@ -77,6 +84,7 @@ private: @@ -77,6 +84,7 @@ private:
menu2* m2;
menu3* m3;
menu4* m4;
menu5* m5;
QLabel* lfps ;
HyperlinkLabel* lpath;
@ -87,6 +95,7 @@ private: @@ -87,6 +95,7 @@ private:
sagauss* m_sagauss;
twoPoint* m_tp;
clhe* m_clhe;
MultiPoint* m_mp;
usbcontrol* ucontrol;
usbthread* usb;
@ -133,5 +142,10 @@ private: @@ -133,5 +142,10 @@ private:
cv::Mat lastimage;
bool saveeeee;
QMap<double , uint*> birghts;
};
#endif // MAINWINDOW_H

128
mainwindow.ui

@ -6,8 +6,8 @@ @@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>1374</width>
<height>607</height>
<width>1386</width>
<height>619</height>
</rect>
</property>
<property name="windowTitle">
@ -15,61 +15,7 @@ @@ -15,61 +15,7 @@
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="TogglePushButton" name="pushButton">
<property name="text">
<string>开始传输</string>
</property>
</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="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string> 行数 </string>
</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">
<string> 列数 </string>
</property>
</widget>
</item>
<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">
<item row="2" column="0" colspan="6">
<widget class="Splitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@ -247,6 +193,74 @@ @@ -247,6 +193,74 @@
</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">
<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="0" column="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string> 行数 </string>
</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">
<string> 列数 </string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>存一帧</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>计算</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>

32
menu5.cpp

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
#include "menu5.h"
#include "ui_menu5.h"
menu5::menu5(QWidget *parent) :
QWidget(parent),
ui(new Ui::menu5)
{
ui->setupUi(this);
}
menu5::~menu5()
{
delete ui;
}
void menu5::on_pushButton_clicked()
{
emit signalsave();
}
void menu5::on_pushButton_2_clicked()
{
emit signalcalc();
}
void menu5::on_pushButton_3_clicked()
{
emit signalsavedata();
}

33
menu5.h

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
#ifndef MENU5_H
#define MENU5_H
#include <QWidget>
namespace Ui {
class menu5;
}
class menu5 : public QWidget
{
Q_OBJECT
public:
explicit menu5(QWidget *parent = nullptr);
~menu5();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
signals:
void signalsave();
void signalcalc();
void signalsavedata();
private:
Ui::menu5 *ui;
};
#endif // MENU5_H

42
menu5.ui

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>menu5</class>
<widget class="QWidget" name="menu5">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>480</width>
<height>640</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>存32帧亮度</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>开始计算</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>保存数据</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

177
multipoint.cpp

@ -0,0 +1,177 @@ @@ -0,0 +1,177 @@
#include "multipoint.h"
#include "QDebug"
#include <QFile>
MultiPoint::MultiPoint(QObject *parent)
: QObject{parent}
{
thread = new QThread();
thread->start();
this->moveToThread(thread);
ready = false;
b_save = false;
n_save = 0;
}
void MultiPoint::saveData(cv::Mat img)
{
cv::Mat temp;
img.copyTo(temp);
datas[cv::mean(img)[0]] = temp;
}
void MultiPoint::calcData()
{
ready = false;
if(stagecount<2)
return;
double v0 = datas.begin().key();
stagecount = datas.size();
double vn =( datas.begin()+stagecount-1).key();
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 ;
memset(kstages,0,sizeof(double)*512*640);
memset(bstages,0,sizeof(double)*512*640);
int k = 1;
for(;k<stagecount;start++,k++){
end = start+1;
double vs = start.key();
double ve = end.key();
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;
double* bs = bstages+k*512*640;
/// y = kx+b
/// vs = k*x0+b
/// ve = k*x1+b
/// k = (ve-vs)/(x1-x0)
/// b = vs-k*x0
///
for(int i = 0;i<ms.rows;i++){
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);
}
}
}
double* ss = stages+(k-1)*512*640;
double* ks = kstages+k*512*640;
double* bs = bstages+k*512*640;
cv::Mat ms = end.value();
for(int i = 0;i<512;i++){
for(int j = 0;j<640;j++){
*(ss+i*640+j) = ms.at<float>(i,j);
*(ks+i*640+j) = 0;
*(bs+i*640+j) = 65535;
}
}
qDebug()<<__FILE__<<__LINE__;
ready = true;
}
void MultiPoint::runData(cv::Mat img)
{
if(b_save)
meanmat(img);
if(ready){
cv::Mat dst(img.rows,img.cols,img.type());
for(int i = 0; i< img.rows;i++){
for(int j = 0; j< img.cols;j++){
int k = 0;
for(; k<stagecount;k++)
{
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];
}
}
emit signalsendimg(dst);
}
else{
emit signalsendimg(img);
}
}
void MultiPoint::meanmat(cv::Mat img)
{
if(n_save == 32){
img.convertTo(msave,CV_32FC1,1.0/32.0);
}
else if(n_save>0){
for(int i = 0;i<img.rows;i++){
for(int j = 0;j<img.cols;j++){
msave.at<float>(i,j) += img.at<ushort>(i,j)/32.0;
}
}
}
else{
saveData(msave);
b_save = false;
}
n_save --;
}
void MultiPoint::save()
{
qDebug()<<__FILE__<<__LINE__;
n_save = 32;
b_save = true;
}
void MultiPoint::savedata()
{
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");
fk.open(QIODevice::ReadWrite);
fk.write((char*)kstages,(k+1)*640*512*4);
fk.close();
QFile fb("b.bin");
fb.open(QIODevice::ReadWrite);
fb.write((char*)bstages,(k+1)*640*512*4);
fb.close();
}

60
multipoint.h

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
#ifndef MULTIPOINT_H
#define MULTIPOINT_H
#include <QObject>
#include <QMap>
#include <QThread>
#include <opencv2/opencv.hpp>
class MultiPoint : public QObject
{
Q_OBJECT
public:
explicit MultiPoint(QObject *parent = nullptr);
public slots:
void saveData(cv::Mat );
void calcData();
void runData(cv::Mat );
void meanmat(cv::Mat);
void save();
void savedata();
signals:
void signalsendimg(cv::Mat);
private:
QThread* thread;
bool ready;
QMap<double,cv::Mat> datas;
int stagecount;
double* stages;
double* kstages;
double* bstages;
cv::Mat msave;
bool b_save;
int n_save;
};
#endif // MULTIPOINT_H

5
readme.txt

@ -1,3 +1,8 @@ @@ -1,3 +1,8 @@
版本:1.4.2.0
添加多点校正算法
版本:1.4.1.1
启动前添加延时2s
取消双边滤波等功能

100
twopoint.cpp

@ -243,12 +243,108 @@ void twoPoint::setpara(double range) @@ -243,12 +243,108 @@ void twoPoint::setpara(double range)
this->dbrange = range;
}
void twoPoint::saveData(cv::Mat img)
{
cv::Mat temp;
img.copyTo(temp);
datas[cv::mean(img)[0]] = temp;
}
void twoPoint::calcData()
{
double v0 = datas.begin().key();
double vn = datas.end().key();
stagecount = datas.size();
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 = start++;
memset(kstages,0,sizeof(double)*512*640);
memset(bstages,0,sizeof(double)*512*640);
int k = 1;
for(;start!=datas.end();start++,end++,k++){
double vs = start.key();
double ve = end.key();
vs = (vs-v0)/(vn-v0)*65535;
ve = (ve-v0)/(vn-v0)*65535;
cv::Mat ms = start.value();
cv::Mat me = end.value();
double* ks = kstages+k*512*640;
double* bs = bstages+k*512*640;
/// y = kx+b
/// vs = k*x0+b
/// ve = k*x1+b
/// k = (ve-vs)/(x1-x0)
/// b = vs-k*x0
///
for(int i = 0;i<ms.rows;i++){
for(int j = 0;j< ms.cols;j++){
*(ks+i*ms.cols+j) = (ve-vs)/(me.at<ushort>(i,j) - ms.at<ushort>(i,j));
*(bs+i*ms.cols+j) = vs - k*ms.at<ushort>(i,j);
}
}
}
}
void twoPoint::runData(cv::Mat img)
{
cv::Mat dst(img.rows,img.cols,img.type());
for(int i = 0; i< img.rows;i++){
for(int j = 0; j< img.cols;j++){
int k = 0;
for(; k<stagecount;k++)
{
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];
}
}
}
void twoPoint::meanmat(cv::Mat img)
{
if(n_save == 32){
img.convertTo(msave,CV_32FC1,1.0/32.0);
}
else if(n_save>0){
for(int i = 0;i<img.rows;i++){
for(int j = 0;j<img.cols;j++){
msave.at<float>(i,j) += img.at<ushort>(i,j)/32.0;
}
}
}
else{
saveData(msave);
b_save = false;
}
n_save --;
}
void twoPoint::save()
{
n_save = 32;
b_save = true;
}
void twoPoint::slotprocimg(cv::Mat img)
{
img = img/vardim;
img = img*vardim;
if(b_save)
meanmat(img);
if(b_savelow){
addlow(img,n_savelow);

28
twopoint.h

@ -6,6 +6,9 @@ @@ -6,6 +6,9 @@
#include <opencv2/opencv.hpp>
#include <QMap>
class twoPoint : public QObject
{
Q_OBJECT
@ -35,6 +38,16 @@ public: @@ -35,6 +38,16 @@ public:
void dbon();
void dboff();
void setpara(double range);
void saveData(cv::Mat );
void calcData();
void runData(cv::Mat );
void meanmat(cv::Mat);
void save();
public slots:
void slotprocimg(cv::Mat);
signals:
@ -67,6 +80,21 @@ private: @@ -67,6 +80,21 @@ private:
double high ,low , kmean;
QMap<double,cv::Mat> datas;
QMap<double,cv::Mat> rmpk;
QMap<double,cv::Mat> rmpb;
int stagecount;
double* stages;
double* kstages;
double* bstages;
cv::Mat msave;
bool b_save;
int n_save;
};
#endif // TWOPOINT_H

Loading…
Cancel
Save