#include "multipoint.h" #include "QDebug" #include #include 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]/4] = temp; emit signalNewFrame(cv::mean(img)[0]/4); } void MultiPoint::calcData(QVector vct) { qDebug()<<__FILE__<<__LINE__; ready = false; // stagecount = datas.size(); stagecount = vct.length(); if(stagecount<2) return; qDebug()<<"statge count = "<< stagecount; // double v0 = datas[vct.at(0)].key(); double v0 = vct.first(); // double vn =( datas.begin()+stagecount-1).key(); double vn = vct.last(); stages = (double*)malloc(sizeof(double)*rows*cols*(stagecount+1)); kstages = (double*)malloc(sizeof(double)*rows*cols*(stagecount+1)); bstages = (double*)malloc(sizeof(double)*rows*cols*(stagecount+1)); // QMap::Iterator start = datas.begin(); // QMap::Iterator end ; memset(kstages,0,sizeof(double)*rows*cols); memset(bstages,0,sizeof(double)*rows*cols); int k = 1; // for(;k(i,j)); *(ks+i*ms.cols+j) = int((ve-vs)/(me.at(i,j) - ms.at(i,j))); // *(bs+i*ms.cols+j) = vs ; //- k*ms.at(i,j); } } } qDebug()<<__FILE__<<__LINE__; double* ss = stages+(k-1)*rows*cols; double* ks = kstages+k*rows*cols; double* bs = bstages+k; *(bs) = 65535; // *(bs) = vct.last(); // cv::Mat ms = end.value(); qDebug()<<__FILE__<<__LINE__; cv::Mat ms = datas[vct.last()]; qDebug()<(i,j)); *(ks+i*cols+j) = 0; } } 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(i,j) < stages[k*img.rows*img.cols+i*img.cols+j]) break; } if(k == 0) dst.at(i,j) = bstages[1]; else dst.at(i,j) = kstages[k*img.rows*img.cols+i*img.cols+j] *(img.at(i,j)-stages[(k-1)*img.rows*img.cols+i*img.cols+j])+ bstages[k]; } } emit signalsendimg(dst); } else{ emit signalsendimg(img); } } void MultiPoint::meanmat(cv::Mat img) { // if(n_save == 32){ if(n_save == 32){ img.convertTo(msave,CV_32FC1,1.0/32.0); } else if(n_save>0){ for(int i = 0;i(i,j) += img.at(i,j)/32.0; } } } else{ saveData(msave); b_save = false; } n_save --; } void MultiPoint::save() { // n_save = 32; n_save = 32; b_save = true; } void MultiPoint::savedata(QString path) { // int k =0; // for(QMap::Iterator iter = datas.begin();iter!= datas.end();iter++){ // cv::imwrite(QString::number(k).toStdString()+ ".tiff",iter.value()); // k+=1; // } QDir d; d.mkdir(path); QFile fs(path+ "/s.bin"); fs.open(QIODevice::ReadWrite); fs.write((char*)stages,(stagecount+1)*cols*rows*8); fs.close(); QFile fk(path+ "/k.bin"); fk.open(QIODevice::ReadWrite); fk.write((char*)kstages,(stagecount+1)*cols*rows*8); fk.close(); QFile fb(path+"/b.bin"); fb.open(QIODevice::ReadWrite); fb.write((char*)bstages,(stagecount+1)*cols*rows*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/rows/cols - 1; qDebug()<<"stagecount"<