//公式:g(i,j)=alpthf(i,j)+Beta;
//alpha是像素对比度系数,Beta像素亮度处理
//具体实现,采用上一节对BGR图像像素的处理
Mat.at(row,col)[0]…
//控制像素值在0-255之间
saturate_cast(g(i,j)=alpthf(i,j)+Beta);
//若使用形式对像素进行处理,需要将图像convertTo转成float
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (src.channels()==3)
{
//src是8位unchar型数据,Vef读不到
float r = m.at<Vec3f>(i, j)[0];
float g = m.at<Vec3f>(i, j)[1];
float b = m.at<Vec3f>(i, j)[2];
dst.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(r*alpha + beta);
dst.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(g*alpha + beta);//控制灰度值0--255
dst.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(g*alpha + beta);
}
else if (gray.channels()==1)
{
dst.at<uchar>(i, j) = saturate_cast<uchar>(((float)gray.at<uchar>(i, j))*alpha+beta);
}
}
}
//源码: 对于像素的赋值需要创建一个空白图像Mat::zeros(size(),type());
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
//图像变换1.像素操作2.邻域操作
//调整图像亮度和对比度属于像素变换
int main()
{
Mat src = imread("C:\\Users\\Administrator\\Pictures\\Saved Pictures\\timg6ZAGKYHR.jpg");
if (src.empty())
{
printf("ould not find image \n");
return -1;
}
char input_win[] = "input image";
namedWindow("input_win", WINDOW_AUTOSIZE);
imshow("opencv set up demo", src);
int height = src.rows;
int width = src.cols;
float alpha = 1.2;//图像像素间的对比度
float beta = 50;//图像像素间的亮度
Mat dst,gray;
dst = Mat::zeros(src.size(), src.type());
cvtColor(src, gray, COLOR_BGR2GRAY);
//将src转成float
Mat m;
src.convertTo(m, CV_32F);
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (src.channels()==3)
{
//src是8位unchar型数据,Vef读不到
float r = m.at<Vec3f>(i, j)[0];
float g = m.at<Vec3f>(i, j)[1];
float b = m.at<Vec3f>(i, j)[2];
dst.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(r*alpha + beta);
dst.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(g*alpha + beta);//控制灰度值0--255
dst.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(g*alpha + beta);
}
else if (gray.channels()==1)
{
dst.at<uchar>(i, j) = saturate_cast<uchar>(((float)gray.at<uchar>(i, j))*alpha+beta);
}
}
}
imshow("ori img", gray);
imshow("image change", dst);
waitKey(0);
return 1;