c++ - 将图像复制到另一个图像的部分
问题描述
我正在尝试将图像复制到另一个图像(将徽标放在图像的右下方)。我的代码成功地将徽标复制到房间图像上,但是当我应用蒙版时它会进行一些奇怪的拉伸。
// Overlay logo
// src = 3 channel image of a room
// logo = 3 channel image of a logo (most of the Mat is black except for the logo).
// logo is smaller than the room image
Mat res;
Mat thresh;
src.copyTo(res);
threshold(logo, thresh, 1, 255, CV_THRESH_BINARY);
Rect r(res.cols-logo.cols, res.rows-logo.rows, logo.cols, logo.rows);
logo.copyTo(res(r), thresh);
解决方案
您的徽标似乎是彩色图像。这意味着您的thresh
图像也是彩色图像。当您将其用作蒙版时,它将被水平拉伸,因为额外的通道被解释为更多列。
尝试cvtColor(logo, grayLogo, CV_BGR2GRAY)
在阈值之前添加并在阈值中使用grayLogo
。
推荐阅读
- c# - C# 上的 Mysql 未打开“System.InvalidOperationException:'连接必须有效且打开。'”
- postman - 我可以从 Postman 中的集合生成开放 api 吗?
- sql - SQL添加字符串结束值
- javascript - HTML 不显示来自 API 的数据,但在 .ts 文件的控制台中显示
- amazon-web-services - Spring Boot 任务未完成
- sequelize-typescript - 如何避免 sequelize.sync() 每次执行都在终端打印所有内容
- json - 使用 JsonSlurper 读取数组名称
- python - Pandas:如何使用合并单元格读取 Excel
- go - 基于多个条件的 Gorm 一对一关系
- c# - 如何在 asp.net 上的 bootstrap 5 中显示模态