Получение исходных координат пикселя, взятого из искаженного изображения


У меня есть четыре угла, извлеченные из sourceImage:

src_vertices[0] = corners[upperLeft];
src_vertices[1] = corners[upperRight];   
src_vertices[2] = corners[downLeft];
src_vertices[3] = corners[downRight];

Эти четыре угла искривлены в destinationImage так:

dst_vertices[0] = Point(0,0);
dst_vertices[1] = Point(width, 0); 
dst_vertices[2] = Point(0, height);
dst_vertices[3] = Point(width, height);

Mat warpPerspectiveMatrix = getPerspectiveTransform(src_vertices, dst_vertices);
cv::Size size_d =  Size(width, height);
cv::Mat DestinationImage(width,height,CV_8UC3);
warpPerspective(sourceImage, destinationImage, warpPerspectiveMatrix, size_d, INTER_LINEAR, BORDER_CONSTANT);

Теперь мой вопрос:

У меня есть точка p (x,y), взятая из destinationImage Как я могу получить координаты этой точки в исходном sourceImage

Другими словами, я хочу использовать warpPerspectiveMatrix для выполнения противоположной работы getPerspectiveTransform
1 2

1 ответ:

Вам нужно обратное преобразование перспективы. Если ваше исходное преобразование S - >S', вам нужна матрица преобразования S' - >S

Mat InversewarpPerspectiveMatrix = getPerspectiveTransform(dst_vertices, src_vertices);

Затем вы делаете разреженную матрицу

Mat PerspectiveCoordinates containing the vector x,y.

Наконец, вы хотите позвонить

PerspectiveTransform(PerspectiveCoordinates,OriginalCoordinates,InversewarpPerspectiveMatrix)