Episode Three: ROI区域图像叠加and线性图像混合

来源:互联网 发布:怎么看手机端口 编辑:程序博客网 时间:2024/05/24 04:31

ROI(Region of Interest)感兴趣区域,自定义感兴趣区域在处理图像时有很关键的用途。

且本文实现了,ROI区域的图像叠加,和简单的ROI区域的线性图像混合。

先把code粘上(注:此code是学习的其他大神blog后又写的)


#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <iostream>using namespace cv;using namespace std;/*//利用感兴趣区域ROI实现图像叠加//需要一张logo图和一张普通图像*/bool ROI_AddImage(){//<1>读入图像Mat srcImage1 = imread("pic/qiao.jpg");Mat logoImage = imread("pic/logo1.jpg");if (!srcImage1.data){printf("Sadness!读取srcImage1出现错误.\n");return false;}if (!logoImage.data){printf("Sadness!读取logoImage出现错误.\n");return false;}//<2>给定一个Mat类型并给定其ROI区域Mat imageROI = srcImage1(Rect(10,720,logoImage.cols,logoImage.rows));//<3>加载掩膜(必须是灰度图)Mat mask = imread("pic/logo1.jpg", 0);//加载的掩膜必须是灰度图//<4>将掩膜copy到ROIlogoImage.copyTo(imageROI,mask);//<5>显示最终结果namedWindow("【1】利用ROI实现图像叠加实例");imshow("【1】利用ROI实现图像叠加实例", srcImage1);return true;}/*//利用addWeighted()函数实现图像线性混合//需要两张尺寸一样的图像*/bool LinearBleeding(){//1.定义所需的局部变量double alphaValue = 0.5;double betaValue;Mat srcImage2, srcImage3, dstImage;//2.读取图像,并做错误处理,需要两张同样类型和同样尺寸的图像srcImage2 = imread("pic/scenery.jpg");srcImage3 = imread("pic/human1.jpg");if (!srcImage2.data){printf("Sadness!读取srcImage2出现错误.\n");return false;}if (!srcImage3.data){printf("Sadness!读取srcImage3出现错误.\n");return false;}//3.做图像混合加权操作betaValue = (1.0 - alphaValue);addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);//dst=src2*alpha+src3*beta+gamma//4.创建窗口并显示namedWindow("【2】线性混合示例窗口<原图>byJoanna", 1);imshow("【2】线性混合示例窗口<原图>byJoanna",srcImage2);namedWindow("【3】线性混合示例窗口<效果图>byJoanna", 1);imshow("【3】线性混合示例窗口<效果图>byJoanna", dstImage);return true;}/*//对于指定区域进行线性图像混合,利用cv::addWeighted()函数//自定义感兴趣区域ROI,实现自定义感兴趣区域的线性混合*/bool ROI_LinearBlending(){//1.读取图像并进行错误处理Mat srcImage4 = imread("pic/qiao2.jpg",1);Mat logoImage = imread("pic/logo2.jpg");if (!srcImage4.data){printf("Sadness!读取srcImage4出现错误.\n");return false;}if (!logoImage.data){printf("Sadness!读取logoImage出现错误.\n");return false;}//2.定义一个ROI,并设定感兴趣区域Mat imageROI;//方法1imageROI = srcImage4(Rect(20,750,logoImage.cols,logoImage.rows));//方法2//imageROI = srcImage4(Range(250, 250 + logoImage.rows), Range(200, 200 + logoImage.cols));//3.进行线性图像混合addWeighted(imageROI, 0.5, logoImage, 0.3, 0., imageROI);//4.显示结果namedWindow("【4】区域线性图像混合示例窗口byJoanna");imshow("【4】区域线性图像混合示例窗口byJoanna", srcImage4);return true;}int main(){system("color 0A");//设置控制台的前景和背景色//bool flag1 = ROI_AddImage();if (ROI_AddImage() && LinearBleeding() && ROI_LinearBlending()){printf("最终结果详见图片:\n");cout << endl;}waitKey(0);return 0;}


关于控制台的前景和背景色:



运行结果:

1.


2.


3.



Smart is the new sexy!


阅读全文
0 0