OpenCV 初级图像混合

本文是根据浅墨大神的博客文章加以实践的记录,代码是经过本人自己喜好加注释和改动过的。因为准备跟着他的文章步伐进行学习,在接下来的很多文章都会是这种形式的实践记录,如果希望亲自一睹大神的风采,请猛搓下面链接:点击打开链接

本篇对应的大神博客篇目为:【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析
由于代码较为简单,可自行建立工程配置 OpenCV后加入下面的代码自行运行尝试,图片需要自己准备,如果希望得到完整工程,浅墨大神的博客教程中有放出对应工程的下载链接


包含头文件

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

主体代码

Mat image= imread("dota.jpg");//载入图片,"dota.jpg"为工程目录下的文件
Mat logo= imread("dota_logo.jpg");

Mat imageROI;// 定义一个Mat类型,用于存放,图像的ROI,即图像的感兴趣区域
imageROI= image(Rect(800,350,logo.cols,logo.rows));//指定图像的感兴趣区域,imageROI的数据与源图像image共享存储区,所以此后在imageROI上的操作也会作用在源图像image上
//imageROI= image(Range(350,350+logo.rows),Range(800,800+logo.cols));//亦可这么写

// 将logo加到原图上
addWeighted(imageROI,0.8,logo,0.2,0,imageROI);//数组相加函数,imageROI为原数组,0.8为该数组权值,logo为另一个原数组,0.2为该数组权重,0为添加常数项,imageROI为输出目标数组,函数输出结果为:imageROI=imageROI*0.8+logo*0.2+0

namedWindow("原画+logo图");//显示结果
imshow("原画+logo图",image);
imwrite("我喜欢打dota2 by浅墨.jpg",image);//输出一张jpg图片到工程目录下
waitKey();//等待用户输入任意键,在win32环境下可防止程序运行后一闪就退出


效果图(右下方的灰色LOGO就是我们刚刚用代码加上去的):





posted @ 2014-05-09 16:53  weixinhum  阅读(1354)  评论(1编辑  收藏  举报