Повернуть jpeg изображение на 90 градусов

Имеется бинарный буффер jpeg:

std::vector<unsigned char> buffer;

Как из него получить аналогичный буффер, но соответствующий jpg изображению, повёрнутому на 90 градусов влево (или вправо, это несущественно)?

Поворот должен производиться не ресайзом, не обрезкой, и изменением размеров, то есть поворот изображения 100 на 200 будет изображением 200 на 100.

Если это можно легко сделать без дополнительных библиотек, было бы идеально. Возможно это решается с помощью OpenCV (но я пока не разобрался, как именно), если кто-нибудь подскажет как с ней сделать - тоже хорошо.

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


Ответы (1 шт):

Автор решения: zcorvid

Это можно сделать с помощью OpenCV:

#include <opencv2/core/mat.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>

std::vector<unsigned char> buffer = /* ... init of buffer*/;
cv::Mat img = cv::imdecode(buffer, cv::IMREAD_ANYDEPTH | cv::IMREAD_ANYCOLOR);
cv::rotate(img, img, cv::ROTATE_90_CLOCKWISE);
cv::imencode(".jpg", img, buffer);
→ Ссылка