ICP :: registerModelToScene () не может выполнить минимальный пример - PullRequest
1 голос
/ 05 апреля 2019

Вот минимальный пример вызова registerModelToScene(), заключенного в классе cv::ppf_match_3d::ICP модуля взносов OpenCV сопоставление поверхности :

#include <opencv2/surface_matching/icp.hpp>
#include <opencv2/surface_matching/ppf_helpers.hpp>

int main() {
    /* allocate solver */
    cv::ppf_match_3d::ICP iterativeClosestPoint;

    /* reference vertices */
    cv::Mat reference = cv::ppf_match_3d::loadPLYSimple("reference.ply", 1);
    /* measured vertices */
    cv::Mat measurement = cv::ppf_match_3d::loadPLYSimple("measurement.ply", 1);

    /* do the magic */
    double error;
    cv::Matx44d transformation;
    iterativeClosestPoint.registerModelToScene(reference, measurement, error, transformation);

    return 0;
}

Вершины, с которыми нужно сопоставить (reference.ply) даны в формате файла многоугольника и представляют две точки с нормалями:

ply
format ascii 1.0
element vertex 2
property float x
property float y
property float z
property float nx
property float ny
property float nz
end_header
0 0 0 0 0 1
0 1 0 0 0 1

Вершины, которые должны быть сопоставлены, даны в том же формате файла, те же две точки, повернутые на 20 °относительно оси z:

ply
format ascii 1.0
element vertex 2
property float x
property float y
property float z
property float nx
property float ny
property float nz
end_header
0 0 0 0 0 1
0.3429 0.93937 0 0 0 1

Код компилируется на GCC 8.2.0, OpenCV версии 4.0.0.

Ошибка времени выполнения:

OpenCV: terminate handler is called! The last OpenCV error is:
OpenCV(4.0.0) Error: Assertion failed (dataset.type() == CvType<ElementType>::type()) in GenericIndex, file C:/Users/maxherrman/openCV/4.0.0/modules/flann/include/opencv2/flann.hpp, line 316

При ответах.opencv.org, есть запись о том, что типы данных элементов первых двух параметров registerModelToScene() (Mat) должны совпадать с типами данных четвертого (Matx44d).

Но документация гласит:

В настоящее время CV_32F является единственным поддерживаемым типом данных.

Таким образом, тип данных элементовМодель и сцена (CV_32F) не соответствуют типу элементов в позе (double).

Любой идентификаторили как обойти эту проблему, или я ошибся?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...