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