图像融合 ROI区域和图像混合叠加
理论-线性混合操作
f0 f1 两张大小和类型相同的图片 融合成gx
通过调用以下函数
(权重)
Void cv::addWeighted(InputArray src1,
double alpha,
InputArray src2,
double beta,
double gramma,
OutputArray dst,
int dtype = -1(不用管它,默认)
)
参数1:输入图像src1
参数2:输入图像src1的alpha值
参数3:输入图像src2
参数4:输入图像src2的alpha值
参数5:gammma值 ()
参数6:输出的混合图像
解剖函数里的算法
dst(I) = saturate_cast<uchar>(src1(I)*alpha + src2(I)*beta + gamma)
1、saturate_cast防止像素值溢出(0~255)
2、beta = 1.0 - alpha(由理论可知)
3、gamma值为了调整像素值的大小,一般情况下写0.0
通过对图像设置ROI区域可以实现不同尺寸图像的混合。
在进行图像处理时,常常需要设置感兴趣区域(ROI, region of interest),可以在图像任意位置创建ROI区域,设置ROI区域后可以更有针对性的进行下一步处理。
定义ROI有两种方法(假定都从图像左上角(100,100)的位置划定ROI):
1、第一种是使用表示矩形区域的Rect。它指定矩形的左上角坐标和矩形的长宽来划定ROI区域。
ROIImage = srcImage(Rect(100,100,smallImage.cols,smallImage.rows));
2、第二种方法是使用Range()指定感兴趣区域的行或列的范围。Range()指定的区域是一个连续的存储序列。
ROIImage = srcImage(Range(100,smallImage.rows),Range(100,smallImage.cols));
代码示例如下:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat src1 = imread("liaowenbin.bmp");
Mat src2 = imread("liujiahui.bmp");
if (!src1.data)
{
printf("could not load liaowenbin.bmp .../n");
return -1;
}
if (!src2.data)
{
printf("could not load liujiahui.bmp .../n");
return -1;
}
namedWindow("liaowenbin",WINDOW_AUTOSIZE);
imshow("liaowenbin", src1);
namedWindow("liujiahui",WINDOW_AUTOSIZE);
imshow("liujiahui",src2);
Mat dst;
cv::addWeighted(
src1,
0.5,
src2,
1.0-0.5,
0.0,
dst,
-1 //可以不填写
);
namedWindow("blend",WINDOW_AUTOSIZE);
imshow("blend",dst);
waitKey(0);
return 0;
}
图像融合与ROI应用
919

被折叠的 条评论
为什么被折叠?



