文章目录

  • 1、感兴趣区域:ROI
  • 2、线性混合操作
  • 3、计算数组加权和:addWeighted()函数
  • 4、初级图像混合示例

1、感兴趣区域:ROI

说明:在图像处理领域,设置感兴趣区域来专注或者简化工作过程。从图像中选择的一个图像区域,这个区域是图像分析所关注的重点,圈出这个区域,以便进一步处理。使用ROI指定想要读入的目标,可以减少处理时间,增加精度,给图像处理带来便利。

(1)定义ROI(Rect)

  • 使用表示矩形区域的Rect。他指定矩形的左上角坐标(构造函数的前两个参数)和矩形的长宽(构造函数的后两个参数)

    Mat imageROI;
    imageROI=image(Rect(500,250,logo.cols,logo.rows));
    
  • 指定感兴趣行和列的范围(Range)。Range是指从起始索引到终止索引(不包含终止索引)的一连段连续序列。cRange可以用来定义Range

    imageROI=image(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));
    

2、线性混合操作

说明:线性混合操作就是一种典型的二元(两个输入)的像素操作,它的理论公式如下:

g(x)=(1−a)fa(x)+af3(x)g(x)=(1-a)fa(x)+af3(x) g(x)=(1−a)fa(x)+af3(x)
我们通过在范围0-1之间改变alpha值,来对两幅图像(f0(x)、f1(x))或者两段视频(f0(x)、f1(x))产生时间上的画面叠化效果,就像幻灯片放映和电影制作中的那样,也就是在幻灯片翻页时设置前后页缓慢过渡叠加效果以及电影情节过渡经常出现的画面叠加效果。

3、计算数组加权和:addWeighted()函数

函数原型:

void(InputArray src1,double alpha,InputArray src2,double beta,double gamma,OutputArray dst,int dtype=-1);
  • 第一个参数:InputArray类型的 src1,表示需要加权的第一个数组,常常填一个Mat。
  • 第二个参数:表示第一个数组的权重
  • 第三个参数:表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数
  • 第四个参数:表示第二个数组的权重
  • 第五个参数:一个加到权重总和上的标量值。
  • 第六个参数:输出数组,它和输入的两个数组有相同的尺寸和通道数
  • 第七个参数:输出阵列的可选深度,有默认值-1.当两个输入值具有相同的深度时,参数设置-1,即等同于src1.depth().

dst=src1[I]∗alpha+src2[I]∗beta+gammadst=src1[I]*alpha+src2[I]*beta+gamma dst=src1[I]∗alpha+src2[I]∗beta+gamma

说明:I是多维数组元素的索引值。在遇到多通道数组的时候,每个通道都需要独立地进行处理

代码示例:两个图片,一个是下雨天,另一个是蘑菇图片,产生叠化效果

#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
//全局函数声明
bool LinearBlending();
int main()
{system("color 5E");if ( LinearBlending() ){printf("运行成功,得到需要的图像~:");}waitKey(0);}
/*利用cv:addWeighted()函数实现图像线性混合
*/
bool LinearBlending()
{//定义一些局部变量double alphaValue = 0.5;double betaValue;Mat srcImage2, srcImage3, dstImage;//读取图像(两幅图像同样大小)srcImage2 = imread("D:\\23.jpg");srcImage3 = imread("D:\\24.jpg");if (!srcImage2.data) {printf("读取srcImage2错误~!\n");return false;}if (!srcImage3.data) {printf("读取srcImage2错误~!\n");return false;}//图像混合加权操作betaValue = (1.0 - alphaValue);addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);//创建并显示原窗口namedWindow("<2>线性混合示例窗口", 1);imshow("<2>线性混合示例窗口", srcImage2);imshow("【rain】", srcImage3);namedWindow("<3>线性混合示例窗口", 1);imshow("<3>线性混合示例窗口", dstImage);return true;
}


4、初级图像混合示例

说明:前面已经介绍感兴趣区域ROI和使用addWeighted函数进行图像线性混合的基础上,我们还可以将二者结合起来使用,也就是指定ROI区域,再用addWeighted函数对指定的ROI区域的图像进行混合操作。

#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
//全局函数声明
bool ROI_AddImage();
bool ROI_LinearBlending();
int main()
{system("color 5E");if (ROI_AddImage() && ROI_LinearBlending()){printf("运行成功,得到需要的图像~:");}waitKey(0);}
/*利用感兴趣区域ROI实现图像叠加
*/
bool ROI_AddImage()
{//读入图像Mat srcImage1 = imread("D:\\dota_pa.jpg");Mat logoImage = imread("D:\\dota_logo1.jpg");if (!srcImage1.data) {printf("读取srcImage1错误~!\n");return false;}if (!logoImage.data) {printf("读取logoImage错误~!\n");return false;}//定义一个Mat类型并给其设定的ROI区域Mat imageROI = srcImage1(Rect(200, 50, logoImage.cols, logoImage.rows));//加载掩膜Mat mask = imread("dota_logo1.jpg", 0);//将掩膜复制到ROIlogoImage.copyTo(imageROI, mask);//显示结果namedWindow("<1>利用ROI实现图像叠加");imshow("<1>利用ROI实现图像叠加", srcImage1);return true;
}
/*线性混合实现函数,指定区域线性图像混合,利用cv::addWeighted()函数结合定义
*/
bool ROI_LinearBlending()
{//读取图像Mat srcImage4 = imread("D:\\dota_pa.jpg", 1);Mat logoImage = imread("D:\\dota_logo1.jpg");if (!srcImage4.data) {printf("读取srcImage4错误~!\n");return false;}if (!logoImage.data) {printf("读取logoImage错误~!\n");return false;}//定义一个Mat类型并给其设置ROI区域Mat imageROI;imageROI = srcImage4(Rect(200, 50, logoImage.cols, logoImage.rows));//将logo加到原图上addWeighted(imageROI, 0.5, logoImage, 0.3, 0., imageROI);//显示结果namedWindow("<4>区域线性图像混合示例");imshow("<4>区域线性图像混合", srcImage4);imshow("logo图", logoImage);return true;
}

利用ROI实现图像叠加效果图

区域性线性混合示例图

【OpenCV】—ROI区域图像叠加图像混合相关推荐

  1. 《OpenCV3编程入门》学习笔记5 Core组件进阶(二) ROI区域图像叠加图像混合

    第5章 Core组件进阶 5.2 ROI区域图像叠加&图像混合 5.2.1 感兴趣区域ROI(region of interest) 1.定义ROI区域两种方法: (1)定义矩形区域Rect: ...

  2. python opencv图像叠加/图像融合/mask掩模

    目录 1.图像叠加 2.图像融合 3.图像mask掩模(包括按位AND,OR,NOT和XOR运算) 1.图像叠加 可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res ...

  3. python opencv 图像叠加,python opencv图像叠加/图像融合/mask掩模

    目录python 一.图像叠加 能够经过OpenCV函数cv.add()或简单地经过numpy操做添加两个图像,res = img1 + img2.两个图像应该具备相同的深度和类型,或者第二个图像能够 ...

  4. 【opencv4】opencv视频教程 C++ 6、图像混合、线性混合、混合权重相加addWeighted()、混合加add()、混合乘multiply()

    上一讲:[opencv4]opencv视频教程 C++ 5.读写图像imread.imwrite.读写像素at<>().修改像素值.ROI区域选择(图像裁剪)Rect.Vec3b与Vec3 ...

  5. [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. opencv 手选roi区域_【OpenCV】选择ROI区域

    问题描述:在测试目标跟踪算法时,需要选择不同区域作为目标,进行目标跟踪,测试目标跟踪的效果. 解决思路: 1.OpenCV中提供了鼠标交互控制,利用setMouseCallback()给固定的窗口设置 ...

  7. [Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. 转载:【OpenCV入门教程之四】 ROI区域图像叠加初级图像混合 全剖析

    [OpenCV入门教程之四] ROI区域图像叠加&初级图像混合 全剖析 浅墨_毛星云 2014-03-10 12:48:05 157425 收藏 19 最后发布:2014-03-10 12:4 ...

  9. 【opencv学习笔记】第五篇:访问图像中像素的三种方式、ROI区域图像叠加和图像混合

    1. 访问图像中像素的三种方式 任何图像处理算法,都是从操作每个像素开始的.在OpenCV中,提供了三种访问每个像素的方法. 方法1:指针访问:C操作符[] 方法2:迭代器iterator 方法3:动 ...

  10. (OpenCV — 7)ROI 区域图像叠加&图像混合

    1 感兴趣区域: ROI 在图像处理领域,我们常常需要设置感兴趣区域 ( ROI. region of interest) ,来专注或者简化工作过程 . 也就是从图像中选择的一个图像区域,这个区域是图 ...

最新文章

  1. 27行代码AC_迷宫 2017年第八届蓝桥杯A组第一题(暴力、仿迷宫)
  2. make sure the Graphviz executables are on your systems‘ PATH
  3. 前端js判空处理,js字符串判空,js数组判空
  4. 程序员 面试笔记 C++ 程序设计的基础 第10章
  5. filezilla:阿里云 win10 服务器文件传输(上传和下载)的配置教程
  6. idea中Mark Directory as的几个选项详解
  7. (15)FPGA面试技能提升篇(TDD-LTE协议、GTX IP)
  8. 一次docker中的nginx进程响应慢问题定位记录
  9. cmd 命令行方式执行 matlab 脚本
  10. 2017蓝桥杯C++A:方格分割(DFS)
  11. BMC指定4路NCSI网口中的一路
  12. 迪赛智慧数——柱状图(正负条形图):应届生各行业平均薪酬排行
  13. 基于控制的角度无人机集群——目标追踪
  14. html tr行内样式左对齐,探索CSS单行文字居中,多行文字居左的实现方式
  15. 虚拟吉他手合集 UJAM Instruments Virtual Guitarist Bundle WiN-MAC
  16. ubuntu服务器lxde桌面,LXDE桌面环境简介
  17. flash.js 劫持怎么解决
  18. 精品收藏:GitHub人工智能AI开源项目
  19. maven pc配置要求_竞速游戏《F1 2019》PC配置要求 GTX 1660ti即可畅玩
  20. HTML自定义滚动条附效果图和完整源码

热门文章

  1. 最新 Transformer 预训练模型综述!
  2. PowerDesigne 建立概念数据模型
  3. 点击子元素却也触发父元素的点击事件
  4. 解决Mac系统读写NTFS格式移动硬盘
  5. 基于java springboot记账本微信小程序源码(毕设)
  6. 【转】常见的逻辑谬误
  7. matlab三点绘制三角形,matlab画三角形网格
  8. linux usb 存储设备,找到哪个驱动器对应于Linux中的哪个USB大容量存储设备
  9. multiprocessing.manager管理的对象需要加锁吗_龙伯推出超强员工档案管理系统,用户可以100%...
  10. 效率工具+WPS复选框显示太阳问题解决方法