opencv学习笔记(四)

当两幅图像尺寸相同时,给图像加上水印效果其实很简单,就是简单的将一幅图像加到另一幅图像上(两幅图像乘以一定的系数就可以控制相加的效果):

[cpp]  view plain copy
  1. #include<opencv2/core/core.hpp>  
  2. #include<opencv2/highgui/highgui.hpp>  
  3. using namespace cv;  
  4.   
  5. int main()  
  6. {  
  7.     Mat image1 = imread("D:/picture/images/boldt.jpg");  
  8.     Mat image2 = imread("D:/picture/images/rain.jpg");  
  9.     waitKey(0);  
  10.     Mat result;  
  11.     //调用addWeighted函数  
  12.     //addWeighted(image1,0.7,image2,0.9,0.,result);  
  13.     //利用它的重载函数可以简单的写为  
  14.     result= 0.7*image1+0.9*image2;  
  15.     namedWindow("output");  
  16.     imshow("output",result);  
  17.     waitKey(0);  
  18.     return 0;  
  19. }  


当图像的尺寸不同时,需要在较大的图像上定义一个与较小的图像尺寸相同的感兴趣的区域ROI,把较小的图像加到感兴趣区域上:

 

[cpp]  view plain copy
  1. #include<opencv2/core/core.hpp>  
  2. #include<opencv2/highgui/highgui.hpp>  
  3. using namespace cv;  
  4.   
  5. int main()  
  6. {  
  7.     Mat image1 = imread("D:/picture/images/boldt.jpg");  
  8.     Mat logo = imread("D:/picture/images/logo.bmp");      
  9.     Mat imageROI = image1(Rect(50,50,logo.cols,logo.rows));  
  10.     addWeighted(imageROI,1.0,logo,1.0,0.,imageROI);  
  11.     imshow("结果图像",image1);  
  12.     waitKey(0);  
  13.     return 0;  
  14. }  


这样做有一个明显的问题,就是ROI区域的像素点有可能超过255,导致饱和而显示出白色。怎么办呢?可以通过掩码来完成,使得在感兴趣区域点,只有较小图像的内容,而没有较大图像的内容:

[cpp]  view plain copy
  1. #include<opencv2/core/core.hpp>  
  2. #include<opencv2/highgui/highgui.hpp>  
  3. using namespace cv;  
  4.   
  5. int main()  
  6. {  
  7.     Mat image1 = imread("D:/picture/images/boldt.jpg");  
  8.     Mat logo = imread("D:/picture/images/logo.bmp");      
  9.     Mat imageROI = image1(Rect(50,50,logo.cols,logo.rows));  
  10.     Mat mask = imread("D:/picture/images/logo.bmp",0);  
  11.     logo.copyTo(imageROI,mask);  
  12.     imshow("结果图像",image1);  
  13.     waitKey(0);  
  14.     return 0;  
  15. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值