1、图像变换可以看做如下:
· 像素变换----点操作
· 邻域操作----区域
调整图像亮度和对比度属于像素变换–点操作
2、相关API
Mat new_image = Mat::zeros(image.size(), image.type()); //创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0
saturate_cast<uchar>(value) //确保值大小范围为0~255之间
Mat.at<Vec3b>(y, x)[index] = value //给每个像素点每个通道赋值
演示代码
int height = src.rows;
int width = src.cols;
double alpha = 1.2;
double beta = 50;
dst = Mat::zeros(src.size(), src.type());
/*遍历整个图片像素,对每个像素处理提高亮度与对比度*/
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
dst.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(alpha * src.at<Vec3b>(i, j)[0] + beta); //blue
dst.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(alpha * src.at<Vec3b>(i, j)[1] + beta); //green
dst.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(alpha * src.at<Vec3b>(i, j)[2] + beta); //red
}
}
namedWindow("output", WINDOW_AUTOSIZE);
imshow("output", dst);
运行结果