通过不同的方法((1)权重计算分量法 (2)直接相加法 (3)乘法。),把两张大小相同的图像合成一张图,比较处理后的效果。
1、权重计算分量法
graph(x,y) = graph_src1(x,y) * alpha + graph_src1(x,y) * (1.0-alpha);
通过自己编写代码实现:
float alpha = 0.4;
float alpha1 = 0.6;
for (int r = 0; r < height; r++) // 遍历行
{
uchar* pSrc1RowData = srcImg1.ptr<uchar>(r); // 取源图的行指针
uchar* pSrc2RowData = srcImg2.ptr<uchar>(r); // 取源图的行指针
uchar* pNewRowData = mergeImg.ptr<uchar>(r);// 取新图的行指针
for (int c = 0; c < witdh; c++) // 遍历列
{
offset = c*channels;
pNewRowData[offset + 0] = saturate_cast<uchar>(pSrc1RowData[offset + 0]* alpha + pSrc2RowData[offset + 0]* alpha1); // B
pNewRowData[offset + 1] = saturate_cast<uchar>(pSrc1RowData[offset + 1]* alpha + pSrc2RowData[offset + 1]* alpha1); // G
pNewRowData[offset + 2] = saturate_cast<uchar>(pSrc1RowData[offset + 2]* alpha + pSrc2RowData[offset + 2]* alpha1); // R
}
}
源图1:
源图2:
程序合并结果:
调用openCV函数addWeighted()计算的结果
2、openCV函数add()
3、openCV函数multply()
4、本文程序下载
本文的程序在Debug–x64下载编译运行
ZIP包中包含开发环境,可以直接编译运行。