Opencv利用ROI将一张图片叠加到另一幅图像的指定位置
机器配置为:VS2013+opencv2.4.13+Win-64bit。
===========================分割线========================
本节将利用ROI将一幅图像叠加到另一幅图像的指定位置。
具体过程见下面代码
=======================分割线========================
代码演示
/*
利用ROI将一幅图像叠加到另一幅图像的指定位置
*/ #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv; int main()
{
//【1】读入两幅图像并检查图像是否读取成功
Mat srcImage = imread("D:\\OutPutResult\\ImageTest\\dog1.jpg");
Mat signal = imread("D:\\OutPutResult\\ImageTest\\signal.jpg");
if (!srcImage.data || !signal.data)
{
cout << "读取图像有误,请重新输入正确路径!\n";
return false;
}
imshow("【萌宠】", srcImage);
imshow("【信号】", signal); //【2】定义一个Mat类型并给其设定ROI区域
Mat imageROI = srcImage(Rect(, , signal.cols, signal.rows)); //450,20为自定义起始点坐标
//【3】加载掩模(必须是灰度图)
Mat mask = imread("D:\\OutPutResult\\ImageTest\\signal.jpg", ); //参数0显示为灰度图
//【4】将掩模复制到ROI
signal.copyTo(imageROI, mask);
//【5】显示结果
namedWindow("利用ROI实现图像叠加");
imshow("利用ROI实现图像叠加", srcImage);
waitKey();
return ;
}
==========================分割线============================
显示结果
=========================分割线======================
程序说明
我们会看到程序里有这么一行代码
signal.copyTo(imageROI, mask);
括号里,第一个参数表示为输出图像,第二参数表示为掩码(or掩模)。
我们也可以将这部分内容这么改,见下图:
改后的就不带mask参数,其结果显示都是一样的,那么如何理解带mask参数的这种方式呢?
答:对于形如函数srcImage.copyto(dstImage, mask),mask作为一个掩模板。
函数会检测mask中如果在某个像素点(i, j)其值为1(只看第一通道,所以mask单通道即可)则把srcImage.at(i, j)处的值直接赋给dstImage.at(i, j);如果其值为0则dstImage.at(i, j)处保留其原始像素值。
===============================END============================
尊重文章著作,此文来源地址:https://blog.csdn.net/sinat_36264666/article/details/77414835
Opencv利用ROI将一张图片叠加到另一幅图像的指定位置的更多相关文章
- OpenCV——使用ROI进行图像切割
ROI(region of interest)——感兴趣区域. 1.用途 这个区域是图像分析所关注的重点.圈定这个区域,以便进行进一步的处理.而且,使用ROI指定 想读入的目标,可以减少处理时间,增加 ...
- HTML两张图片叠加问题的进一步修改
要想两张图片叠加,只需在circle添加一个Position:absolute就OK了 以上几步,很多大侠前辈都已经说过,相信不用再啰嗦,我想说的是一种扩展,将示例放到右边,可能因为我悟性低,研究了一 ...
- 【转】Python+opencv利用sobel进行边缘检测(细节讲解)
#! usr/bin/env python # coding:utf-8 # 2018年7月2日06:48:35 # 2018年7月2日23:11:59 import cv2 import numpy ...
- Opencv探索之路(二十):制作一个简易手动图像配准工具
近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了.然后老师叫我尝试 ...
- OpenCV,计算两幅图像的单应矩阵
平面射影变换是关于其次3维矢量的一种线性变换,可以使用一个非奇异的$3 \times 3$矩阵H表示,$X' = HX$,射影变换也叫做单应(Homography).计算出两幅图像之间的单应矩阵H,那 ...
- 【OpenCV学习】计算两幅图像的重叠区域
问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域. 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图 ...
- 利用RandomAccessFile类在指定文件指定位置插入内容
package File; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...
- Opencv实现两幅图像融合
实现两幅图像线性(不同系数下)的融合涉及到Opencv中两个关键的方法,addWeighted()和createTrackbar() addWeighted方法: 函数原型: void addWeig ...
- 利用jquery制作滚动到指定位置触发动画
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...
随机推荐
- PyCharm连接远程服务器
PyCharm连接远程服务器 1.Tools->Start SSH session 2.新建一个连接或者选择一个已经存在的sftp 3.选择Edit credentials 填写相关连接信息 4 ...
- 去掉字符空格js
1. 去掉字符串两端的空格 String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, "&quo ...
- 搭建node js的运行环境。
第一步:首先安装一个NVM,就是一个node的版本管理器. nvm的下载地址::https://github.com/coreybutler/nvm-windows/releases,我选择下载的是n ...
- PB开发境界 多个DW进行update
多个DW进行update //菜鸟代码dw_1.Update()dw_2.Update()初级代码IF dw_1.Update() = 1 And dw_2.Update() = 1 THEN ...
- Open-Source Cybersecurity Infrastructure
https://www.linkedin.com/pulse/open-source-cybersecurity-infrastructure-adrian/ The increased maturi ...
- Java 多线程之自旋锁
一.什么是自旋锁? 自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环. 获取锁的线 ...
- 某神秘公司 RESTful、共用接口、前后端分离、接口约定的实践
阅读本文大概需要 4.6 分钟. 本文来自 https://juejin.im/post/59eafab36fb9a045076eccc3 前言 随着互联网高速发展,公司对项目开发周期不断缩短,我们面 ...
- IntelliJ IDEA 的使用方法总结
创建普通 Java 项目 1.首次新建一个项目 如果是首次使用,在这个界面可以点击 Create New Project ,创建一个新项目. 选择Java,然后选好 JDK 的位置,接着点击下一步 N ...
- springbean的生命周期
1.Spring对Bean进行实例化(相当于程序中的new Xx())2.Spring将值和Bean的引用注入进Bean对应的属性中3.如果Bean实现了BeanNameAware接口,Spring将 ...
- [P4886] 快递员
考虑在树上选个点rt作为根,并且快递中心就选这儿.计算出所有配送的代价(2*两段之和),设他们的最大值为Max.若此时存在下列情况时,可以判定Max已经为最优解. 1)存在代价为Max的配送(u,v) ...