图像亮度和对比度的调整

在网上找了很多图像亮度的调整算法,下面是其中一种,可以通过条形框进行调整,并实时的查看对应参数值后的效果。

图像亮度处理公式:

y = x - 127.5 \* (1 - B) * k + 127.5 * (1 + B);

x 是输入像素值

y 是输出像素值

B 是亮度值, 范围在-1,1之间

对比度处理公式:

k是调节对比度

k = tan( (45 + 44 * c) / 180 * PI );

c 是对比度值, 范围在-1,1之间

下面是具体实现代码

cpp 复制代码
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"

using namespace std;
using namespace cv;


#define SWAP(a, b, t)  do { t = a; a = b; b = t; } while(0)
#define CLIP_RANGE(value, min, max)  ( (value) > (max) ? (max) : (((value) < (min)) ? (min) : (value)) )
#define COLOR_RANGE(value)  CLIP_RANGE(value, 0, 255)
#define M_PI 3.1415926
int adjustBrightnessContrast(InputArray src, OutputArray dst, int brightness, int contrast)
{
	Mat input = src.getMat();
	if (input.empty()) {
		return -1;
	}

	dst.create(src.size(), src.type());
	Mat output = dst.getMat();

	brightness = CLIP_RANGE(brightness, -255, 255);
	contrast = CLIP_RANGE(contrast, -255, 255);
	double B = brightness / 255.;
	double c = contrast / 255.;
	double k = tan((45 + 44 * c) / 180 * M_PI);
	Mat lookupTable(1, 256, CV_8U);
	uchar* p = lookupTable.data;
	for (int i = 0; i < 256; i++)
		p[i] = COLOR_RANGE((i - 127.5 * (1 - B)) * k + 127.5 * (1 + B));
	LUT(input, lookupTable, output);
	return 0;
}

static string window_name = "photo";
static Mat src;
static int brightness = 255;
static int contrast = 255;
static void callbackAdjust(int, void*)
{
	Mat dst;
	adjustBrightnessContrast(src, dst, brightness - 255, contrast - 255);
	imshow(window_name, dst);
}

int main()
{
	src = imread("D:/vsproject/skin_beauty/jishu-image/face02/center.jpg");

	if (!src.data) {
		cout << "error read image" << endl;
		return -1;
	}

	namedWindow(window_name, WINDOW_NORMAL);
	resizeWindow(window_name, 800, 600);//设置窗口展示大小
	createTrackbar("brightness", window_name, &brightness, 2 * brightness, callbackAdjust);
	createTrackbar("contrast", window_name, &contrast, 2 * contrast, callbackAdjust);
	callbackAdjust(0, 0);

	waitKey();

	return 0;

}
相关推荐
大雨淅淅几秒前
【机器人】ROS2 机械臂控制(MoveIt2)从入门到实战
人工智能·python·神经网络·学习·算法·机器学习·机器人
m0_564876842 分钟前
怎么写好一个好的skill
人工智能·深度学习·职场和发展
zhangfeng11333 分钟前
把权重写死在芯片的架构 Taalas(HC1)芯片:车载 GPU / 智能驾驶 / 机器人 / 算力卡适配总结
人工智能·深度学习·语言模型·架构·机器人·gpu算力·芯片
芝士爱知识a4 分钟前
【2026量化新纪元】深度评测:以AlphaGBM为核心的顶级AI量化分析软件推荐及全维度选型指南
人工智能·机器学习·因子挖掘·ai量化·alphagbm·量化交易软件测评
OBiO20135 分钟前
精准靶向血管平滑肌AAV在心血管疾病研究中的应用
人工智能
ST——Jess5 分钟前
传统文化的数智化解构:当代专业命理师排盘工具与效能进化深度测评报告
人工智能
孟俊宇-MJY6 分钟前
CSDN AI数字营销全功能实测
大数据·人工智能
A_Sinon8 分钟前
卷积的流程
人工智能·深度学习·神经网络
lauo10 分钟前
互动影游的Token经济革命:ibbot手机如何成为AI互动娱乐的生产节点
人工智能·智能手机·娱乐
CIO_Alliance10 分钟前
鼎捷和钉钉系统集成破局:iPaaS成制造业破解“系统割裂”关键
人工智能·钉钉·ipaas·系统集成·制造业·企业数智化转型·零售电商