c++ - OpenCV C ++中透视变换中的图像保留
问题描述
我在桌子上有一张白纸的图像,方向不同。像这样的东西:
现在,我检测到了白纸,得到了梯形的坐标。我现在有另一个图像,比如这样的键盘:
现在我的目标是用这个键盘代替那张纸。我发现getPerspectiveTransform
可以使用。我把这里给出的代码作为我的入门。在那里,代替output
,我喂食output = imread("paper.jpg")
,代替input
,input = imread("keyboard.jpg")
。并且之前也检测到了白纸的边角。
改造后用键盘代替白纸效果很好,但是桌子、铅笔等的背景被黑掉了。整个背景变成了黑色,只能看到代替白纸的键盘。
所以我想知道如何通过透视变换替换部分,仍然保留背景图像。
解决方案
如果您没有编辑帖子中的代码,那么您正在转换键盘,但没有在其后面添加原始图像。您需要以某种方式将 2 个图像合成在一起。假设键盘图像具有 alpha 通道,您可以遵循以下方法:https ://www.learnopencv.com/alpha-blending-using-opencv-cpp-python/ 。
如果它没有 alpha 通道,您可以创建自己的遮罩并将输入和输出图像组合在一起,由遮罩调节:
composite = input
composite[mask != 0] = output * mask
祝你好运!
推荐阅读
- docker - 为什么 log4j 在 windows 和 Linux 上都能正常工作,同样的配置在 docker 上却不行?
- python - 在jupyter中播放音频,在for循环中
- ios - 对 xib.file 中使用的 UIPickerViewData 的引用
- angular - Angular Keycloak 服务初始化
- python - 无法调试 pywin32 服务
- go - go ++ 运算符需要互斥体吗?
- android - 从网站下载 apk 时无法通过意图启动电子邮件
- jquery - 使用codeigniter上传多张图片时如何修复图片的宽度和高度?
- python - JMeter中的模块导入错误
- reactjs - 警告:validateDOMNesting(...): 不能作为子级出现
我正在尝试使用 reactjs 进行这种工作。但它返回错误
<table> cannot appear as a child of <tr>
这是我的 RoomRow.js
import React from 'react' import {Link} from 'r