Сохранение изображения при преобразовании перспективы в OpenCV C

#c #image-processing #opencv3.0 #perspectivecamera

#c #обработка изображений #opencv3.0 #перспективная камера

Вопрос:

У меня есть изображение белой бумаги на столе, с другой ориентацией. Что-то вроде этого:

введите описание изображения здесь

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

введите описание изображения здесь

Теперь моя цель — заменить эту бумагу этой клавиатурой. Я обнаружил, что getPerspectiveTransform это можно использовать. Я ссылался на приведенный здесь код в качестве начального для моего. Там, вместо output , я вставил output = imread("paper.jpg") , а вместо input , input = imread("keyboard.jpg") . А также ранее обнаружил углы белого листа.

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

Итак, я хотел знать, как заменить часть с помощью преобразования перспективы, сохраняя при этом фоновое изображение.

Ответ №1:

Если вы не редактировали код в публикации, вы преобразуете клавиатуру, но не добавляете исходное изображение за ней. Вам нужно будет каким-то образом скомпоновать 2 изображения вместе. Предполагая, что изображение клавиатуры имеет альфа-канал, вы могли бы следовать этому методу: https://www.learnopencv.com/alpha-blending-using-opencv-cpp-python /.

Если у него нет альфа-канала, вы можете создать свою собственную маску и объединить входные и выходные изображения вместе, модерируемые маской:

 composite = input
composite[mask != 0] = output * mask
  

Удачи!