OpenCV C ++中透视变换中的图像保留

时间:2019-03-14 20:30:47

标签: c++ image-processing opencv3.0 perspectivecamera

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

enter image description here

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

enter image description here

现在,我的目标是用此键盘替换该纸张。我发现可以使用getPerspectiveTransform。我将here给出的代码称为我的入门代码。 我在那里代替output,喂饱了output = imread("paper.jpg"),代替了inputinput = imread("keyboard.jpg")。并且还早些时候就检测到了白板的角落。

通过转换后用键盘替换白皮书,效果很好,但是包含书桌,铅笔等的背景被涂黑了。整个背景变成黑色,只能看到替换白皮书的键盘。

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

1 个答案:

答案 0 :(得分:0)

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

如果它没有Alpha通道,则可以创建自己的遮罩并将输入和输出图像组合在一起,并通过遮罩进行调整:

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

祝你好运!