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>利用 ...
随机推荐
- MySQL基础知识3
- 简单css实现input提示交互动画效果
通过基础CSS实现输入提示交互动画效果,并兼容各浏览器! 1.效果展示 2.css代码 h4 { margin: 30px 0; } input { margin:; font-size: 16px; ...
- JS中获取CSS样式的方法
1.对于内联样式,可以直接使用ele.style.属性名(当然也可以用键值对的方式)获得.注意在CSS中单词之间用-连接,在JS中要用驼峰命名法 如 <div id="dv" ...
- HttpServletRequest.getContextPath()取得的路径
如果项目名称为test,你在浏览器中输入请求路径:http://localhost:8080/test/pc/list.jsp 执行下面向行代码后打印出如下结果: 1. System.out.prin ...
- django2+python3+uwsgi+centos7部署网站
Centos7中安装Python虚拟环境 2018年08月27日 00:09:36 kaichenkai 阅读数:984 1.为什么要搭建虚拟环境? 问题:如果在一台电脑上, 想开发多个不同的项目, ...
- C#轻量级通通讯组件StriveEngine —— C/S通信开源demo(2) —— 使用二进制协议 (附源码)
前段时间,有几个研究ESFramework通信框架的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关 ...
- Hive数仓之快速入门(二)
上次已经讲了<Hive数据仓库之快速入门一>不记得的小伙伴可以点击回顾一下,接下来我们再讲Hive数据仓库之快速入门二 DQL hive中的order by.distribute by.s ...
- Eclipse 启动报错 An internal error occurred during: "Initializing Java Tooling"
如图所示,我的Eclispe版本是Oxygen,启动的时候turnaround弹出这种错误. 多种情况会导致这种报错.通过[重置窗口布局],可解决大部分情况: 解决办法:点击菜单导航栏的Window ...
- java,让debug出色
虽然我们不喜欢bug,但是bug永远都存在.虽然我们牛逼,但是仍然有不知道的东西,解决不了的问题.so,还得借助工具,让咱效率提起来扛扛的.解决的问题如是:由于某种原因,其他系统发送的mq,我这边说没 ...
- python 中几种基本的矩阵操作应用
在图像处理中,python 的矩阵运算经常会用到一些简单的操作,可是,由于好久没用,很多东西还是忘记了,这里做个备忘: #-*-coding:utf-8-*- import numpy as np a ...