圖像處理(四)
圖像混合
1.理論-線性混合操作
2.相關API (addWeighted)
理論-線性混合操作
其中的取值範圍爲0~1之間
相關API (addWeighted)
參數1:輸入圖像Mat – src1
參數2:輸入圖像src1的alpha值
參數3:輸入圖像Mat – src2
參數4:輸入圖像src2的alpha值
參數5:gamma值
參數6:輸出混合圖像
注意點:兩張圖像的大小和類型必須一致纔可以
代碼案例
Mat src1, src2, dest;
src1 = imread("D:/vcprojects/images/LinuxLogo.jpg");
src2 = imread("D:/vcprojects/images/win7logo.jpg");
if (!src1.data) {
printf("could not load LinuxLogo image...\n");
return -1;
}
if (!src2.data) {
printf("could not load win7logo image...\n");
return -1;
}
if (src1.rows == src2.rows && src1.cols == src2.cols) {
double alpha = 0.5;
namedWindow("line-blend", CV_WINDOW_AUTOSIZE);
addWeighted(src1, (1 - alpha), src2, alpha, 0.0, dest);
imshow("line-blend", dest);
waitKey(0);
return 0;
}
else {
printf("image size is not same...\n");
return -1;
}
調整圖像亮度與對比度
圖像變換可以看作如下:
- 像素變換 – 點操作
- 鄰域操作 – 區域
調整圖像亮度和對比度屬於像素變換-點操作
重要的API
Mat new_image = Mat::zeros( image.size(), image.type() ); 創建一張跟原圖像大小和類型一致的空白圖像、像素值初始化爲0
saturate_cast(value)確保值大小範圍爲0~255之間
Mat.at(y,x)[index]=value 給每個像素點每個通道賦值