opencv实现滑动条控制图片的对比度和亮度变换

一般的图像处理算子都是一个函数,它接受一个或多个输入图像,并产生输出图像。


图像亮度和对比度的调整操作,其实属于图像处理变换中比较简单的一种——点操作。点操作有一个特点,仅仅根据输入像素值(有时可加上某些全局信息或参数),来计算相应的输出像素值。这类算子包括亮度(brightness)和对比度(contrast)调整,以及颜色校正(colorcorrection)和变换(transformations)。最简单的式子表示图像的对比度和亮度变换可表示如下:


参数:

1.f(x)表示原图像,既输入图像;g(x)表示变换输出的图像。

2.a可用来控制图像f(x)对比度。

3.b可用来控制图像f(x)亮度

实现以上操作需要设计图像像素点的访问,因此进一步改写该式子为:

             G(x )= a*F(i,j) + b;

图像像素点遍历算法如下:

//遍历像素点并执行g=a*f+b操作
	for (int y = 0;y < image.rows;y++) {
		for (int x = 0;x < image.cols;x++) {
			for (int c = 0;c < 3;c++) {
				new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>
					((a*0.01)*(image.at<Vec3b>(y, x)[c]) + b);
			}
		}
	}
其中访问RGB图像顺序位GBR,(x,y,c)代表第x行,第y列,第c通道

整体代码如下:

#include"stdafx.h"
#include <opencv2/core/utility.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void listPixel_Operate(int, void*);

// 定义全局变量
int a, b;
Mat image, new_image;

int main() {
	//读取图片
	image = imread("E:\\pictures\\For_Project\\New_opencv\\Sceen\\12.jpg");
	//创建新的和原图片一样大小的空白图片用于接收对比度和亮度变换
	new_image = Mat::zeros(image.size(), image.type());
	//变换系数初值
	a = 100;
	b = 100;

	namedWindow("【效果图窗口】", 1);
	//创建滑动条
	createTrackbar("对比度", "【效果图窗口】", &a, 300, listPixel_Operate);
	createTrackbar("亮 度", "【效果图窗口】", &b, 300, listPixel_Operate);
	//调用回调函数
	listPixel_Operate(a, 0);
	listPixel_Operate(b, 0);
	//等待键盘按键‘q’退出
	while (char(waitKey(1)) != 'q') {}
	return 0;
}

void listPixel_Operate(int,void*) {
	namedWindow("【原图窗口】", 1);

	//遍历像素点并执行g=a*f+b操作
	for (int y = 0;y < image.rows;y++) {
		for (int x = 0;x < image.cols;x++) {
			for (int c = 0;c < 3;c++) {
				new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>
					((a*0.01)*(image.at<Vec3b>(y, x)[c]) + b);
			}
		}
	}

	imshow("【原图】", image);
	imshow("【效果图窗口】", new_image);
}
效果图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值