好快啊,都到了第六篇了,雖然以前學過圖形學,學過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;
}
這裏是生成的效果圖:
望大家一起加油,一起進步!!!