#include "ivpicsave.h" #include #include #include #ifdef NVIDIA_AGX #include //OpenCV4 use this line #include //OpenCV4 use this line #endif ivpicsave::ivpicsave(QString strdir,QString strsuffix,std::string strvin) { mstrdir = strdir; mstrsuffix = strsuffix; mstrvin = strvin; mnWriteIndex = 0; } void ivpicsave::SetPic(iv::vision::rawpic pic) { if((mbGetPicSize == true ) && (mbSave == false)) { return; } mMutex.lock(); mrawpic.CopyFrom(pic); mnWriteIndex++; mMutex.unlock(); } void ivpicsave::run() { int nReadIndex = 0; std::vector xvectorpic; bool bgetfps = false; double ffps = 30; while(!QThread::isInterruptionRequested()) { if((mbSave == false)&&(bgetfps)) { msleep(100); continue; } bool bNew = false; iv::vision::rawpic pic; if(mnWriteIndex != nReadIndex) { mMutex.lock(); pic.CopyFrom(mrawpic); mMutex.unlock(); if(bgetfps == false) { xvectorpic.push_back(pic); if(xvectorpic.size()>=10) { std::vector xtimediff; int j; for(j=1;j1000.0)ffps = 1000.0; ffps = 1000.0/ffps; mMutexSave.lock(); mfps = ffps; mnpicheight = xvectorpic[0].height(); mnpicwidth = xvectorpic[0].width(); mMutexSave.unlock(); mbGetPicSize = true; bgetfps = true; xvectorpic.clear(); xtimediff.clear(); } } nReadIndex++; bNew = true; } if(mbSave == false) { msleep(1); continue; } if(bNew) { cv::Mat mat(pic.height(),pic.width(),pic.mattype()); if(mbSave) { if(pic.type() == 1) memcpy(mat.data,pic.picdata().data(),mat.rows*mat.cols*mat.elemSize()); else { std::vector buff(pic.picdata().data(),pic.picdata().data()+pic.picdata().size()); mat = cv::imdecode(buff,CV_LOAD_IMAGE_COLOR); } int font = cv::FONT_HERSHEY_DUPLEX; QDateTime xrecvtime = QDateTime::fromMSecsSinceEpoch(pic.time()); // char strtext[256]; // snprintf(strtext,"%s",xrecvtime.toString("yyyy-MM-dd hh:mm:ss:zzz").toLatin1().data()); std::string strtext = xrecvtime.toString("yyyy-MM-dd hh:mm:ss:zzz").toStdString(); double fratio = pic.width()/640; int fontsize = 0.5*fratio; if(fontsize<1)fontsize = 1; cv::putText(mat,strtext,cv::Point(pic.width() - 230*fratio,30*fratio),font,0.5*fratio,cv::Scalar(0,255,0),fontsize); cv::putText(mat,mstrvin,cv::Point(10,30*fratio),font,0.5*fratio,cv::Scalar(0,255,0),fontsize); } mMutexSave.lock(); if(mbSave) { mWriter<