1、理论
(1)、图像变换可以如下:
——像素变换 --- 点操作。
——领域操作 --- 区域。
调整图像亮度和对比度属于像素变换---点操作
2、opencv重要API
(1)、Mat new_image = Mat::zeros( image.size(), image.type() ); 创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0。
(2)、saturate_cast<uchar>(value)确保值大小范围为0~255之间。
(3)、Mat.at<Vec3b>(y,x)[index]=value 给每个像素点每个通道赋值。
3、代码演示
int main(int argc, char** argv)
{
//1. 加载图像1
Mat src1 = imread("./linuxlogo.jpg");
//2. 判断图像1加载是否成功
if (!src1.data)
{
cout << "could not load image Linux Logo..." << endl;
return -1;
}
//3. 显示图像1
namedWindow("src1", CV_WINDOW_AUTOSIZE);
imshow("src1", src1);
//4. 加载图像2
Mat src2 = imread("./win7logo.png");
//5. 判断图像2加载是否成功
if (!src2.data) {
cout << "could not load image WIN7 Logo..." << endl;
return -1;
}
//6. 显示图像2
namedWindow("src2", CV_WINDOW_AUTOSIZE);
imshow("src2", src2);
Mat dst;
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);
//multiply(src1, src2, dst, 0.2);
namedWindow("dst", CV_WINDOW_AUTOSIZE);
imshow("dst", dst);
}
else
{
printf("could not blend images , the size of images is not same...\n");
return -1;
}
waitKey(0);
return 0;
}
4、结果显示