Лептоника обрезка изображения на повороте

PIX* returnRotatedImage(PIX* image, float theta)
{
    PIX* rotated = pixRotate(image, -theta, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, image->w, image->h);

    return rotated;
}

Когда я выполняю приведенный выше код для изображения, полученное изображение обрезается по краям.

Пример: сканирование оригинала, после которого изображение проходит через функцию выше, чтобы повернуть его на ~89 градусов.

У меня еще нет 10 репутации, поэтому я не могу встраивать изображения, но вот ссылка на две картинки: https://imgur.com/a/y7wAn

Мне нужно, чтобы он работал и для произвольных углов (не только для углов, близких к 90 градусам), поэтому, к сожалению, представленное здесь решение не будет работать.

Описание функции pixRotate гласит:

 *      (6) The dest can be expanded so that no image pixels
 *          are lost.  To invoke expansion, input the original
 *          width and height.  For repeated rotation, use of the
 *          original width and height allows the expansion to
 *          stop at the maximum required size, which is a square 
 *          with side = sqrt(w*w + h*h).

однако после поворота кажется, что он расширяется, и, таким образом, пиксели теряются, даже если конечный размер изображения правильный. Если я использую pixRotate(..., 0, 0) вместо pixRotate(..., w, h), я получаю изображение, повернутое в исходные размеры: https://i.imgur.com/YZSETl5.jpg.

Я неправильно интерпретирую описание функции pixRotate? Возможно ли то, что я хочу сделать? Или это возможно ошибка?

Заранее спасибо.

0 ответов

Другие вопросы по тегам