Как преобразовать однородные точки в неоднородные точки с помощью OpenCV (в C ++)

Я хочу конвертировать очки. На данный момент мой код выглядит так:

std::vector<cv::Point3d> homCamPoints(4);
// some assignments to homCamPoints
std::vector<cv::Point2d> inhomCamPoints(4);
convertPointsFromHomogeneous(homCamPoints, inhomCamPoints);

Но я всегда получаю ошибку исключения относительно позиции памяти. Итак, я предполагаю, что мой тип ввода неверен, хотя Документация OpenCV говорит:

  • src — входной вектор N-мерных точек.
  • dst — Выходной вектор N-1-мерных точек.

Похоже, мои типы ввода в порядке. Однако в Интернете я нашел только примеры использования cv::Mat типа, но из-за нехватки времени я бы хотел избежать реструктуризации на этом этапе.

Я запускаю свой код в режиме отладки. При вызове функции параметры действительно кажутся хорошими. Ошибка возникает сразу после входа в функцию, но я не могу понять это точно, так как не могу попасть в сам код функции. У кого-нибудь есть идея, почему это не работает? Благодарю.

1

Решение

Я попробовал это:

std::vector<cv::Point3d> homCamPoints(4, cv::Point3d(0,0,0));
homCamPoints[0] = cv::Point3d(0,0,0);
homCamPoints[1] = cv::Point3d(1,1,1);
homCamPoints[2] = cv::Point3d(-1,-1,-1);
homCamPoints[3] = cv::Point3d(2,2,2);

std::vector<cv::Point2d> inhomCamPoints(4);

cv::convertPointsFromHomogeneous(homCamPoints, inhomCamPoints);

и это работает без исключения. Может быть, ваша проблема где-то еще в вашем коде.
InhomCamPoints:
[0, 0], [1, 1], [1, 1], [1, 1]

1

Другие решения


По вопросам рекламы [email protected]