首页 > 解决方案 > OpenCV C ++中透视变换中的图像保留

问题描述

我在桌子上有一张白纸的图像,方向不同。像这样的东西:

在此处输入图像描述

现在,我检测到了白纸,得到了梯形的坐标。我现在有另一个图像,比如这样的键盘:

在此处输入图像描述

现在我的目标是用这个键盘代替那张纸。我发现getPerspectiveTransform可以使用。我把这里给出的代码作为我的入门。在那里,代替output,我喂食output = imread("paper.jpg"),代替inputinput = imread("keyboard.jpg")。并且之前也检测到了白纸的边角。

改造后用键盘代替白纸效果很好,但是桌子、铅笔等的背景被黑掉了。整个背景变成了黑色,只能看到代替白纸的键盘。

所以我想知道如何通过透视变换替换部分,仍然保留背景图像。

标签: c++image-processingopencv3.0perspectivecamera

解决方案


如果您没有编辑帖子中的代码,那么您正在转换键盘,但没有在其后面添加原始图像。您需要以某种方式将 2 个图像合成在一起。假设键盘图像具有 alpha 通道,您可以遵循以下方法:https ://www.learnopencv.com/alpha-blending-using-opencv-cpp-python/ 。

如果它没有 alpha 通道,您可以创建自己的遮罩并将输入和输出图像组合在一起,由遮罩调节:

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

祝你好运!


推荐阅读