@Evgeny_A

Как «докрасить» часть картинки с помощью OpenCV?

Здравствуйте!

Есть вот такая картинка:

5e766bcc740aa648560514.png
Я используя свой алгоритм выравниваю картинки. Вращение может быть по часовой и против часовой. Центр картинки и центр вращения всегда сходятся. Результат такой:

5e766c08d1e8e489668056.png
Вопрос: как с помощью OpenCV замостить появляющиеся по углам черные области (которые всегда 0,0,0) так, чтобы это выглядело "нативно"?

Я написал вложенные циклы, которые проходит картинку попиксельно и если цвет пикселя == (0,0,0), то ищется ближайший пиксель != (0,0,0) и этот цвет применяется к выбранному пикселю. Проблема в том, что работает это очень медленно, а фантазии выдумать альтернативное решение не хватает.

Подскажите идеи или направления, как закрасить уголочки максимально нативно с точки зрения человека.
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Никак.
Crop-ните по зазорам, используя максимальную высоту чёрных уголков по углам получившегося, после поворота, изображения.
Т.е. обрежьте по периметру все чёрные зоны, не входящие в максимально-возможную центральную прямоугольную область.
Ответ написан
Комментировать
@U235U235
Да легко, при вращении через warpAffine установить BorderTypes в нужный тип.
Например:
cv.warpAffine(src, dst, M, dsize, cv.INTER_LINEAR, cv.BORDER_REFLECT, new cv.Scalar());
Тут можете потренироваться на Лене:
https://docs.opencv.org/3.4/dd/d52/tutorial_js_geo...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы