コード例 #1
0
ファイル: main.cpp プロジェクト: KubaO/stackoverflown
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();
}
コード例 #2
0
// 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();
        }
    }

}