int main(int argc, char *argv[]) { QApplication a(argc, argv); std::random_device rd; random_engine gen(rd()); int imageSize = 300; QList<QImage> images; for (int n = 0; n < 28; ++n) images << randomImage(imageSize, gen); std::uniform_int_distribution<> dImage(0, images.size()-1); QStackedWidget display; QPushButton ready("I'm Ready!"); QLabel label, labelHidden; display.addWidget(&ready); display.addWidget(&label); display.addWidget(&labelHidden); QTimer splashTimer; QStateMachine machine; QState s1(&machine), s2(&machine), s3(&machine), s4(&machine); splashTimer.setSingleShot(true); QObject::connect(&s1, &QState::entered, [&]{ display.setCurrentWidget(&ready); ready.setDefault(true); ready.setFocus(); }); s1.addTransition(&ready, "clicked()", &s2); QObject::connect(&s2, &QState::entered, [&]{ label.setPixmap(QPixmap::fromImage(images.at(dImage(gen)))); display.setCurrentWidget(&label); splashTimer.start(250 + std::uniform_int_distribution<>(1500, 3000)(gen)); }); s2.addTransition(&splashTimer, "timeout()", &s3); QObject::connect(&s3, &QState::entered, [&]{ display.setCurrentWidget(&labelHidden); splashTimer.start(2000); }); s3.addTransition(&splashTimer, "timeout()", &s4); QObject::connect(&s4, &QState::entered, [&]{ display.setCurrentWidget(&label); splashTimer.start(3000); }); s4.addTransition(&splashTimer, "timeout()", &s1); machine.setInitialState(&s1); machine.start(); display.show(); return a.exec(); }
// load mesh from uImage, vImage, dImage and maskImage // only for the first frame void MainEngine::LoadInitialMeshUVD() { // cout << "load mesh from uvd images" << endl; DepthImageType uImage(m_nHeight,m_nWidth); DepthImageType vImage(m_nHeight,m_nWidth); DepthImageType dImage(m_nHeight,m_nWidth); InternalIntensityImageType maskImage; m_pImageSourceEngine->readUVDImage(uImage,vImage,dImage,maskImage); // // we need to compute normals // specify the depth scale for the level we want to do optimization on if(!trackerSettings.useDepthPyramid) { PangaeaMeshIO::createMeshFromDepth(templateMesh, m_pColorImageRGB, uImage, vImage, dImage, maskImage, m_nHeight, m_nWidth, trackerSettings.depth2MeshScale); templateMeshPyramid = std::move(PangaeaMeshPyramid(templateMesh)); }else { int numMeshLevels = trackerSettings.imagePyramidSamplingFactors.size(); templateMeshPyramid.numLevels = numMeshLevels; templateMeshPyramid.levels.resize(numMeshLevels); templateMeshPyramid.meshPyramidVertexNum.resize(numMeshLevels); // in this case, the shape and image are subsampled using the same factor for(int i = 0; i < numMeshLevels; ++i) { // PangaeaMeshIO::createMeshFromDepth(templateMesh, m_pColorImageRGB, // uImage, vImage, dImage, maskImage, m_nHeight, m_nWidth, // 1.0/trackerSettings.imagePyramidSamplingFactors[i]); // templateMeshPyramid.levels[i] = std::move(templateMesh); // templateMesh.clear(); InternalColorImageType colorImage; cv::Mat tempColorImageRGB(m_nHeight, m_nWidth, CV_8UC3, m_pColorImageRGB); tempColorImageRGB.convertTo(colorImage, cv::DataType<Vec3d>::type, 1./255); int blurSize = trackerSettings.blurFilterSizes[i]; if(blurSize > 0) cv::GaussianBlur(colorImage, colorImage, cv::Size(blurSize, blurSize), 3); PangaeaMeshIO::createMeshFromDepth(templateMesh, colorImage, uImage, vImage, dImage, maskImage, m_nHeight, m_nWidth, 1.0/trackerSettings.imagePyramidSamplingFactors[i]); templateMeshPyramid.meshPyramidVertexNum[i] = templateMesh.numVertices; templateMeshPyramid.levels[i] = std::move(templateMesh); templateMesh.clear(); } } }