图像的叠加、混合、分离

1 感兴趣区域ROI

ROI(region of interest)感兴趣区域,在图像处理过程中,有时候我们希望对图像中的某些区域进行处理,也就是仅对某些区域感兴趣,那么我们就可以定义我们的ROI区域。
方法:定义一个Rect来表示或指定行列范围。

Mat roi1, rot2;
// 左上角
roi1 = img(Rect(0, 0, img.cols / 2, img.rows / 2));
// 右下角
rot2 = img(Range(img.rows/2 , img.rows), Range(img.cols/2, img.cols));
imshow("roi1", roi1);
imshow("rot2", rot2);

注意此时的roi1就是属于img的一部分了,它的改变会改变img。它只是对img某个区域的引用。
例:

#include "QtGuiApplication1.h"//#define Ui
#ifndef Ui#include <QFileInfo>
#include <QDir>
#include <opencv2\opencv.hpp>
using namespace cv;#else#include <QtWidgets/QApplication>#endifint main(int argc, char *argv[])
{QApplication a(argc, argv);#ifdef UiQtGuiApplication1 w;w.show();return a.exec();
#elseQString path = QFileInfo(QCoreApplication::applicationDirPath(), "../../../../../").absoluteDir().absolutePath() + "/imgs/";Mat sorImg = imread(path.toStdString() + "sor1.jpg", IMREAD_GRAYSCALE);Mat logImg = imread(path.toStdString() + "log.jpg", IMREAD_GRAYSCALE);imshow("sorImg", sorImg);imshow("logImg", logImg);Rect roiRegion(0, 0, logImg.cols, logImg.rows);Mat roi = sorImg(roiRegion);logImg.copyTo(roi);   imshow("dstImg", sorImg);waitKey();return 0;
#endif}

效果图:在图片的左上角打上了一个logo。

2 线性混合

在图片处理软件中经常看到两幅图片的叠加,其实原理很简单,就是两幅图像素值的加权叠加。一个公式说明原理:

g=f0*(1-a)+a*f1 其中g是目标图像,f0、f1是两幅进行叠加的图片。a是权重范围是(0-1)。 通过公式就可以看出这是基于像素点的操作,自己很容易实现,openCv也提供了API先上例子。

#include "QtGuiApplication1.h"//#define Ui
#ifndef Ui#include <QFileInfo>
#include <QDir>
#include <opencv2\opencv.hpp>
using namespace cv;#else#include <QtWidgets/QApplication>#endifint main(int argc, char *argv[])
{QApplication a(argc, argv);#ifdef UiQtGuiApplication1 w;w.show();return a.exec();
#elseQString path = QFileInfo(QCoreApplication::applicationDirPath(), "../../../../../").absoluteDir().absolutePath() + "/imgs/";Mat src1 = imread(path.toStdString() + "sor1.jpg", IMREAD_UNCHANGED);Mat src2 = imread(path.toStdString() + "sor2.jpg", IMREAD_UNCHANGED);imshow("src1", src1);imshow("src2", src2);Mat dst;addWeighted(src1, 0.5, src2, 0.5,0, dst);imshow("dst", dst);waitKey();return 0;
#endif}

效果图:这是一个美女和一幅风景画的叠加。

API:

void addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype = -1);
参数:src1:叠加图像1。
alpha:叠加图像1的权重。
src2:叠加图像2。
beta:叠加图像2的权重。
gamma:整体亮度偏移量。
dst:目标输出图像。

值得注意的是:
两幅图像尺寸类型必须的一致,若果两幅图像不一致,那先用ROI提取尺寸较小的图像再来叠加吧。
虽然没有强制两个权重相加必须为1,但通常都是那么干的。

3 图像通道分离、混合

顾名思义,这是针对多通道图像的,例如彩色图像。啥也不说给出API即懂。
void split(InputArray m, OutputArrayOfArrays mv);
void merge(InputArrayOfArrays mv, OutputArray dst);
void mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,

图像的叠加、混合、分离相关推荐

  1. matlab动态混合纹理,15组动态背景纹理素材AE模板,可与图像叠加混合

    您当前浏览器不支持本地视频播放~ 视频无法播放?点击切换线路>> [默认线路] [备用线路] 说到动态纹理贴图,可能还有些小伙伴不太了解,其实动态纹理素材的运用是非常广泛的,纹理素材多以粒 ...

  2. youcans 的 OpenCV 学习课—4.图像的叠加与混合

    youcans 的 OpenCV 学习课-4.图像的叠加与混合 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 本节介绍图像的加法.叠加与混合,提供完整例程和运行结果:加法 ...

  3. 图像低频高频区域分离 小波变换

    图像低频高频区域分离 简介 本篇整理记录利用小波分离图像的高频.低频部分信息. 具体实现 实现代码参考资料:小波变换 C++ opencv 实现. 小波变换 小波生成和参考资料中一致.小波变换中,首先 ...

  4. 【OpenCV 例程200篇】21. 图像的叠加

    [OpenCV 例程200篇]21. 图像的叠加 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 两张图像直接进行加法 ...

  5. ITK:在图像上叠加标签图

    ITK:在图像上叠加标签图 内容提要 输出结果 C++实现代码 内容提要 在图像上覆盖LabelMap. 输出结果 C++实现代码 #include "itkBinaryImageToLab ...

  6. 【MATLAB】绘制三角函数曲线、图像的叠加

    目录 1.三角函数曲线 2.图像的叠加 1.三角函数曲线 h0=figure('toolbar','none',...'position',[198 56 350 300],...'name','实例 ...

  7. 计算机视觉 Project 1:图像滤波和混合图像

    计算机视觉 Project 1:Image Filtering and Hybrid Images 计算机视觉 Project 1:Image Filtering and Hybrid Images ...

  8. 【OCR】图像预处理-文字背景分离方法

    1. 摘要 在OCR处理文档时,经常会遇到自然拍照场景中由于光照强度不一.拍摄角度不同.相机成像元件差异,因此会导致拍摄的图片与扫描文档存在较大区别.为使文档文字内容更加鲜明,便于后续特征提取,本文目 ...

  9. OpenCV(九)—————图像通道合并与分离(C++)

    1.分离 将一张图像分别分成三个通道的图像. 使用split()函数,分离之后的数据存到一个Mat对象的容器中. #include <opencv2/opencv.hpp> #includ ...

最新文章

  1. mac 不显示 外接屏幕_Mac移动硬盘热拔(直接拔掉)后,再插上不显示移动硬盘解决办法...
  2. Tomcat内存溢出解决方案
  3. ReactNative ViewPageAndroid组件详解
  4. “史上最全PyTorch资源汇总“(转载)
  5. svpwm仿真_案例12:三相三线PWM整流仿真建模
  6. 爱鲜蜂签约神策数据 让精细化运营落地企业
  7. Keras Tutorial: Deep Learning in Python
  8. 【 .NET Core 3.0 】框架之九 || 依赖注入 与 IoC
  9. python切片的对象_Python 对象切片
  10. zabbix api python使用
  11. 实验2-3-7 求平方与倒数序列的部分和 (C语言)
  12. 小程序 css框架,微信小程序_如何支持Less等CSS框架开发
  13. CephOpenstack结合说明操作
  14. Git版本控制管理(七)--提交和查看提交历史
  15. 龙格库塔算法原理详解
  16. python excel 单元格换行_数据标准化 使用Python脚本处理excel单元格换行符
  17. matlab 固态 机械_电脑是固态+机械硬盘好??纯固态硬盘好?
  18. 微信小程序_在当前页面刷新数据 / 重载当前页面
  19. SolidWorks2020绘制XT60PW-M模型
  20. #汇编语言字符串的输出(dosbox运行时输出乱码问题解决)

热门文章

  1. 腾讯云轻量云服务器体验
  2. Oracle10g日期型函数
  3. 利用Kali进行WiFi钓鱼测试实战
  4. 淘宝api接口手把手教你傻瓜式操作
  5. jc机制是什么_王者荣耀JC纵情吐槽排位机制官方光速回应 而玩家却无人理 - 游戏新闻 - 神游网...
  6. 哈佛计算机系小哥哥中文字幕,【哈佛学霸小哥哥的一天】同样的24小时,为什么他们更优秀...
  7. 同一台机器不同的sata线居然传输率不同
  8. 鸿蒙申请智慧屏sn号,采用鸿蒙系统的荣耀智慧屏正式亮相
  9. linux系统网络连接不上的解决办法
  10. LWN:利用page folio来明确内存操作!