利用OpenCV实现图像的叠加
来源:互联网 发布:上海东京飞机票知乎 编辑:程序博客网 时间:2024/06/05 15:30
这次摸索受到了http://wenku.baidu.com/link?url=5EFJU1fmuU3zD3wYcdiElcKcAfx7vDWNYiwROhyXvZln9sSR8UiKs1PBks9KreGXi9MeriFlgRn0RzB688jVYvGT7vmciYdg5yIuv3-sHvG
的启发。
因为工作需要,我经常需要把两个图像叠加在一起。QT的QImage,或者MFC的CImage,都无法提供这种功能。(QT提供图像叠加功能,但不好使,见我的博客Qt的四个常见的图像叠加模式)实现叠加图像功能的最理想工具是OpenCV。下面给出我的图像叠加示例代码,并加以解释。
#include "overlapmat.h"#include <opencv2/opencv.hpp> #include <QImage>#include <QPainter> using namespace cv; #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_core249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_imgproc249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_highgui249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_ml249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_video249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_features2d249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_calib3d249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_objdetect249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_contrib249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_legacy249d.lib")#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_flann249d.lib")Matm_matMTI;Matm_matMask;Matm_matSAR;QImagem_img;OverlapMat::OverlapMat(QWidget *parent): QMainWindow(parent){ui.setupUi(this);m_matMTI = imread("E:\\VC\\MTI.png",CV_LOAD_IMAGE_COLOR);//CV_LOAD_IMAGE_GRAYSCALE);m_matSAR = imread("E:\\VC\\SAR.jpg",CV_LOAD_IMAGE_COLOR);//m_matMask = imread("E:\\VC\\MTI.png",CV_LOAD_IMAGE_GRAYSCALE);cvtColor(m_matMTI, m_matMask, CV_BGR2GRAY);Mat ROI = m_matSAR(cv::Rect(20,50, m_matMTI.cols, m_matMTI.rows));m_matMTI.copyTo(ROI, m_matMask);//假如用m_matMTI.copyTo(ROI),MTI的黑背景也会画到m_matSAR上面.imwrite("E:\\merge.bmp", m_matSAR);}OverlapMat::~OverlapMat(){}void OverlapMat::paintEvent(QPaintEvent *e){}
MTI.png:
SAR.jpg:
混合后的效果:
可见,在混合的图片的左上角,出现了红色圆圈和绿色方块。而且黑色背景没有一起叠加上去。
实现这个效果的关键语句是 m_matMTI.copyTo(ROI, m_matMask);
m_matMTI是你想要添加的图像,ROi是被叠加的(即接受m_matMTI的图像)。ROI可以是一整幅图的一部分,在本实例里面,ROI是m_matSAR的一部分。其左上角坐标在
SAR.jpg里面的位置是(20,50),其面积与MTI.png一样大。ROI只是m_matMTI的一份浅拷贝,因此,copyTo函数归根结底,还是拷贝到了m_matMTI上面。ROI只是给出图像添加到m_matMTI的哪个位置。
m_matMask是一个灰度图,它检测m_matMTI的所有像素,假如像素的取值是(0,0,0)即黑色,那么这个像素就不做叠加处理。正是m_matMask的存在,才阻止了黑色背景叠加进来。读者可以试下,用m_matMTI.copyTo(ROI)代替m_matMTI.copyTo(ROI, m_matMask);。这样会把黑色背景也叠加进来。
- 利用OpenCV实现图像的叠加
- [转]利用OpenCV实现图像的叠加
- 【拜小白opencv】15-利用ROI将一幅图像叠加到另一幅图像的指定位置
- opencv开发笔记(八):利用感兴趣区域ROI实现图像叠加
- opencv图像叠加
- 利用OpenCV实现图像的阈值分割
- 利用OpenCV实现图像拼接的代码!
- 【OpenCV】通过ROI区域以及掩码实现图像叠加
- Opencv 图像叠加 添加水印
- Opencv 图像叠加 添加水印
- Opencv 图像叠加 添加水印
- Opencv 图像叠加 添加水印
- Opencv 图像叠加 添加水印
- OpenCV ROI区域图像叠加
- Opencv 图像叠加 添加水印
- opencv 图像叠加滚动条
- opencv感兴趣区图像叠加
- Opencv ROI区域图像叠加
- 洛谷 1068——分数线划定(排序)
- RSA 2017 USA 笔记
- 洛谷 1781——宇宙总统(排序)
- 120. Triangle -Medium
- 初学者Apache Solr教程
- 利用OpenCV实现图像的叠加
- MySQL(六)多表查询
- margin坍塌
- Dijkstra(低价空中旅行,LA 3561)
- Android -- init.rc配置文件简介
- dup 与 dup2
- android通过Intent调用手机图片,音频,视频录音拍照等代码
- Solr查询语法示例
- STL Allocator