Как применить матрицу преобразования к точке в OpenCV?

Предположим, что у меня есть матрица преобразования Mat tr, которую я получил от getAffineTransform() и Point2d p. Я хочу, чтобы точка была результатом деформирования p с помощью tr. Предоставляет ли OpenCV способ сделать это?

Ответ 1

cv::transform используется для преобразования точек с матрицей преобразования.

Каждый элемент N-канального массива src интерпретируется как вектор N -элемента, который преобразуется с использованием матрицы m x N или M x (N + 1) m в вектор M-элемента - соответствующий элемент выходной массива dst.

Функция может быть использована для геометрического преобразования N-мерных точек, преобразования произвольного линейного цветового пространства (например, различные виды преобразований RGB в YUV), перетасовки каналов изображения и т.д.

Вот краткий пример в InputArray документации (в противном случае это не актуально):

std::vector<Point2f> vec;
// points or a circle
for( int i = 0; i < 30; i++ )
    vec.push_back(Point2f((float)(100 + 30*cos(i*CV_PI*2/5)),
                          (float)(100 - 30*sin(i*CV_PI*2/5))));
cv::transform(vec, vec, cv::Matx23f(0.707, -0.707, 10, 0.707, 0.707, 20));

Или вы можете просто преобразовать Point2f в Mat и умножить на матрицу.