2014-10-29 10 views

Odpowiedz

14

cv::transform służy do transformacji punktów za pomocą macierzy transformacji.

Każdy element tablicy N -Kanał src jest interpretowane jako N -elementowe wektorem, który jest przekształcany za pomocą M x N lub M, x (n + 1) Macierz M M-- element wektora odpowiedniego elementu tablica wyjściowa dst.

Funkcja ta może być używana do transformacji geometrycznej punktów N-wymiarowych, arbitralnej transformacji liniowej przestrzeni kolorów (np. Różnych transformacji RGB do YUV), tasowania kanałów obrazów i tak dalej.

Jest zwięzły przykład w InputArray documentation (w przeciwnym razie nie ma znaczenia):

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)); 

Można też prawdopodobnie tylko przekonwertować Point2f w Mat i pomnożyć przez macierz.

+1

Dziękuję bardzo. Robi dokładnie to, co chciałem, nawet miałem wektor już pełen punktów, które transformują. Plus jest kilka innych funkcji, które chciałem również na tej samej stronie dokumentacji. Super przydatne. –

+1

Dobrze, będę musiał pamiętać ten jeden. – beaker

Powiązane problemy