在网上找了很多图像亮度的调整算法,下面是其中一种,可以通过条形框进行调整,并实时的查看对应参数值后的效果。
图像亮度处理公式:
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]之间
下面是具体实现代码
#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;
}
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 图像亮度和对比度的调整
发表评论 取消回复