Аффинное преобразование выделенной области

Я хочу создать инструмент для аффинного преобразования выбранной части изображения (многоугольник с четырьмя углами, см. Ссылку на изображение). http://s14.postimg.org/fn9btus8h/explanation.png

Я пытался использовать opencv, но безуспешно.

Спасибо за помощь. С Уважением


person yaroslav    schedule 01.12.2013    source источник


Ответы (2)


Вы должны показать нам, что вы пробовали и почему не добились успеха. Вы можете использовать неправильные точки для создания матрицы преобразования. Правильная процедура описана ниже.

Вы должны использовать getAffineTransform для создания матрицы аффинного преобразования. Это сопоставляет входной треугольник с выходным треугольником, как указано в документации . Но вы должны убедиться, что вы прошли три соответствующие точки двух ваших самолетов.

Если вы не уверены, как выбрать три соответствующие точки на двух ваших плоскостях, просто используйте getPerspectiveTransform и передайте четыре точки двух плоскостей в их соответствующем порядке. Он по-прежнему работает, поскольку аффинное преобразование - это всего лишь частный случай перспективного преобразования.

После получения матрицы преобразования вы должны использовать warpAffine или warpPerspective для сопоставления входного изображения.

person Kamyar Infinity    schedule 01.12.2013

Спасибо всем за помощь. Я нашел решение.

Я использовал функциональность Qt. Вот мой код:

QImage img;
img.load("D:\\sample.png");
QPolygonF polygonIn;
polygonIn  << QPointF(29, 25)
    << QPointF(147, 9)
    << QPointF(210, 100)
    << QPointF(0, 84);

QPolygonF polygonOut;   
polygonOut  << QPointF(29, 25)
    << QPointF(147, 25)
    << QPointF(210, 132)
    << QPointF(0, 84);

QTransform transform;
auto isOk = QTransform::quadToQuad(polygonIn, polygonOut, transform);
if(!isOk)
    throw std::runtime_error("Transformation impossible with such parameters.");

img = img.transformed(transform.toAffine(), Qt::TransformationMode::SmoothTransformation);
person yaroslav    schedule 03.12.2013