//调整图像对比度和亮度
#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat src,dst;//初始化一个操作对象
src = imread("C:/Users/JAY/Desktop/Others/tang.jpg");
if (!src.data)//判断图片是否加载进来
{
cout << "不能加载图片" << endl;
return -1;
}
//cvtColor(src, src, CV_BGR2GRAY);//转换为灰度图像
//IMREAD_GRAYSCALE("原始图片", src);//直接输出灰度图像
imshow("原始图片", src);
int height = src.rows;
int width = src.cols;
dst = Mat::zeros(src.size(), src.type());//初始化输出图像
float alpha = 1.2;//对比度
float beta = 50;//亮度
//Mat m1;
//src.convertTo(m1, CV_32F);//将Vec3b转换为Vec3f数据格式
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if(src.channels() == 3)
{
float b = src.at<Vec3b>(i, j)[0];
float g = src.at<Vec3b>(i, j)[1];
float r = src.at<Vec3b>(i, j)[2];
dst.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(b*alpha + beta);
dst.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(g*alpha + beta);
dst.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(r*alpha + beta);
}
else if (src.channels() == 1)
{
float v = src.at<uchar>(i, j);
dst.at<uchar>(i, j) = saturate_cast<uchar>(v*alpha + beta);
}
}
}
imshow("修改后图片", dst);//""内命名一致,才能显示在一个窗口
waitKey(0);
return 0;
}
结果