Наложение изображений при отображении в OpenCV
У меня есть два изображения, которые я хочу показать друг на друге. одно изображение - одноканальное изображение, а второе - изображение RGB, но большая часть области прозрачна.
Как эти два изображения генерируются в разных функциях. Я знаю, чтобы просто отобразить их друг над другом, я могу использовать одно и то же имя окна при вызове cvShowImage()
но это не работает, когда они взяты из разных функций. Пытаясь это, я использовал cvCvtcolor()
преобразовать двоичное изображение из одного канала в RGB и затем отобразить второе изображение из другой функции. Но это не сработало. Оба изображения имеют одинаковый размер, глубину и количество каналов (после преобразования).
Я хочу избежать передачи одного изображения во вторую функцию и затем нарисовать их. Так что я ищу быстрый грязный трюк для отображения этих двух изображений внахлест.
Спасибо
РЕДАКТИРОВАТЬ:
3 ответа
Я не думаю, что это возможно. Вам придется создать новое изображение или изменить существующее. Вот статья, которая показывает, как это сделать: Прозрачные наложения изображений в OpenCV
Нет возможности "наложить" изображения. cvShowImage()
отображает одно изображение из памяти. Вам нужно будет смешать / объединить их вместе. Есть несколько способов сделать это.
Вы можете скопировать один в 1 или 2 канала другого, вы можете использовать логические операции, такие как AND, OR или XOR, вы можете использовать арифметические операции, такие как Add, Multiply и MultiplyScale (эти операции будут насыщать значения, превышающие 255). Все это также можно сделать с помощью дополнительного маскирующего изображения, такого как ваше изображение BLOB-объекта.
Естественно, вы можете захотеть сделать это в третий буфер, чтобы не перезаписывать ваши оригиналы.
По-видимому, теперь это можно сделать с помощью версии OpenCV 2.1 http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html