好快啊,都到了第六篇了,虽然以前学过图形学,学过shader,感觉接触这个也不是很吃力!加油!
主要思想:
这里主要是图像混合的几种手段,其实和shader中的是一样的,没多大区别:
方法一:
使用: addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst);
方法二:
使用: add(src1, src2, addmap, Mat());
方法三
使用: multiply(src1, src2, mulmap, (1-alpha), -1);
其实在shader和c#中都可以用类似的方法,只是代码的写法不一样,思想都是差不多的!
shader:
Color col1 = float4(1,1,1,1);
Color col2 = float4(0.8,0.2,0.5,0);
col1+col2整体颜色会偏亮,col1*col2整体颜色会偏暗
上面shader的大家可以略过,只是想到了,联系起来而已
下面是完整的代码:
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src1,src2,dst,addmap,mulmap;
src1 = imread("F:/识图/测试1.JPG");
src2 = imread("F:/识图/测试2.JPG");
if (src1.empty())
{
printf("could not found image!");
}
if (src2.empty())
{
printf("could not found image!");
}
double alpha = 0.5;
if (src1.rows==src2.rows&&src1.cols==src2.cols&&src1.type()==src2.type()) {
addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst);
add(src1, src2, addmap, Mat());
multiply(src1, src2, mulmap, (1-alpha), -1);
imshow("1", src1);
imshow("2", src2);
imshow("3", dst);
imshow("4", addmap);
imshow("5", mulmap);
}
else {
printf("could not blend images");
return -1;
}
waitKey(0);
return 0;
}
这里是生成的效果图:
望大家一起加油,一起进步!!!