Создание графического интерфейса для визуализации облака точек - PullRequest
0 голосов
/ 29 мая 2018

У меня есть этот очень простой инструмент, который визуализирует данные лидарного датчика онлайн, используя Opencv.Я хочу создать графический интерфейс для него, но я нуб в этой области.Любые предложения для материала или примеров?Графический интерфейс должен сделать только две вещи:

  1. Принять данные датчика в качестве входных данных через порт LAN.
  2. Визуализируйте это.

Вот то, что я придумал, основываясь на нескольких видео на YouTube.Как мне поступить?

private: int Display_Point_Cloud() {
  // Create Viewer
  cv: :viz::Viz3d viewer("Velodyne");
  const boost: :asio::ip::address address=boost::asio::ip::address::from_string("192.168.1.77");
  const unsigned short port=2368;
  velodyne: :VLP16Capture capture(address, port);
  std: :vector<velodyne::Laser> lasers;
  capture>>lasers;
  std: :vector<cv::Vec3f> buffer (lasers.size());
  for (const velodyne: :Laser& laser: lasers) {
    const double distance=static_cast<double>(laser.distance);
    const double azimuth=laser.azimuth * CV_PI / 180.0;
    const double vertical=laser.vertical * CV_PI / 180.0;
    float x=static_cast<float>((distance * std: :cos(vertical)) * std::sin(azimuth));
    float y=static_cast<float>((distance * std: :cos(vertical)) * std::cos(azimuth));
    float z=static_cast<float>((distance * std: :sin(vertical)));
    if (x==0.0f && y==0.0f && z==0.0f) {
      x=std: :numeric_limits<float>::quiet_NaN();
      y=std: :numeric_limits<float>::quiet_NaN();
      z=std: :numeric_limits<float>::quiet_NaN();
    }
    buffer.push_back(cv::Vec3f(x, y, z));
  }
  // Create Widget
  cv::Mat cloudMat=cv::Mat(static_cast<int>(buffer.size()), 1, CV_32FC3, &buffer[0]);
  cv::viz::WCloud cloud(cloudMat);
  // Show Point Cloud
  viewer.showWidget("Cloud", cloud);
  viewer.spinOnce();
  // Close All Viewers
  cv::viz::unregisterAllWindows();
  return 0;
}

private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
  Display_Point_Cloud();
}


}
;

1 Ответ

0 голосов
/ 29 мая 2018

Попробуй ВТК.https://www.vtk.org/ Я использую его для своей работы, и его можно скомпилировать с поддержкой opencv.

...