Библиотека облаков точек: выделенные точки для пользовательских цветов - PullRequest
0 голосов
/ 29 ноября 2018

Я использую библиотеки pcl и vtk с Qt для визуализации облака точек.Моя установка выглядит как приведенная ниже ссылка http://unanancyowen.com/en/pcl-with-qt/

Теперь, когда мы разрезаем точки, т.е. нажимаем 'x' и выбираем регион с помощью AreaPickingEvent и выбранных точек срезастать красным цветом.Это делается с помощью следующей функции

void PointCloudVisualizer::highlightPoint(std::vector<int>& slice)
    {
        if (slice.size()<1) return;

        for (std::vector<int>::iterator it = slice.begin(); it != slice.end(); it++)    {
            m_cloudLabel[*it] = SELECTED_POINT;//SELECTED_POINT = 1
        }
    }

   void PointCloudVisualizer::updateCloud()
   {
    m_pViewer->updatePointCloud<PointT>(m_pCloud, m_pColorHandler, m_sCurrentPointCloudId.toStdString());
    m_pPointCloudVisualizerUI->qvtkWidget->update();
}

//area picking event, after the points are sliced we call these 2 functions and the sliced points gets red
void PointCloudVisualizer::AreaPickingEventProcess(const pcl::visualization::AreaPickingEvent& event)
{
    vector<int> newSelectedSliceVector;
    event.getPointsIndices(newSelectedSliceVector);

    if (newSelectedSliceVector.empty()) return;

    // remove ground points
    vector<int> groundPointsVector;

    for (auto point : newSelectedSliceVector)
    {
        if (m_cloudLabel[point] != GROUND_POINT)
        {
            groundPointsVector.push_back(point);
        }
    }
    .
    .
    .
    newSelectedSliceVector = groundPointsVector;

    m_lastSelectedSliceVector = newSelectedSliceVector;
    .
    .
    .
    highlightPoint(m_lastSelectedSliceVector);//red color selected points
    updateCloud();
    .
    .
    .
    }

//other variables
    int* m_cloudLabel;
    PointCloudTPtr m_pCloud;

    //initializing m_cloudLabel
    m_cloudLabel = new int[m_pCloud->size()];
    memset(m_cloudLabel, 0, m_pCloud->size()*sizeof(int));

    m_pColorHandler.setInputCloud(m_pCloud);
    m_pColorHandler.setLabel(m_cloudLabel);
    //----------------------------------------

    const int DEFAULT_POINT =  0;
    const int SELECTED_POINT = 1;
    const int GROUND_POINT = 2;

Теперь, если мы передадим GROUND_POINT, он станет синим цветом, который используется для определения плоскости или порога.

Теперь мое требование состоит в том, чтобы покрасить нарезанные точки какпользователь определяет это.Как я могу применить свой собственный цвет к нарезанным точкам с помощью pcl :: RGB.

Любое предложение приветствуется !!

1 Ответ

0 голосов
/ 11 декабря 2018

Обработчик облака точек поддерживает цветную LUT (справочную таблицу) для окрашивания нарезанных точек.Обновлен цвет LUT и вызван highlightPoints, где индекс SELECTED_POINT обновляется по мере выбора пользователем цвета.

...