本文共 1456 字,大约阅读时间需要 4 分钟。
一、理论
在图像处理领域,亮度和对比度的调整是常见的操作。亮度通常控制在0~255之间,选择一个较大的亮度值可以增强图像的整体明亮度。对比度则通过增大图像中的红、绿、蓝(RGB)三种颜色通道的差值来实现,从而使图像更加鲜艳。
二、代码演示
下面将使用OpenCV库展示如何实现亮度和对比度的调整。
代码如下:
#include "opencv2/opencv.hpp"#include "iostream"#include "math.h"
using namespace cv;using namespace std;
int main(){Mat src = imread("E:\vs2015\opencvstudy\3.jpg", 1);if (!src.data){cout << "could not load image1!" << endl;return -1;}char input_win[] = "input image";imshow(input_win, src);cvtColor(src, src, CV_BGR2GRAY);
Mat m1;src.convertTo(m1, CV_32F);double alpha = 0.6; // 控制对比度float beta = 10; // 控制亮度for (int row = 0; row < m1.rows; row++){ for (int col = 0; col < m1.cols; col++) { if (m1.channels() == 3) { float b = m1.at (row, col)[0]; float g = m1.at (row, col)[1]; float r = m1.at (row, col)[2]; dst.at (row, col)[0] = saturate_cast (alpha * b + beta); dst.at (row, col)[1] = saturate_cast (alpha * g + beta); dst.at (row, col)[2] = saturate_cast (alpha * r + beta); } else if (m1.channels() == 1) { float pixel = m1.at (row, col); dst.at (row, col) = saturate_cast (alpha * pixel + beta); } else { cout << "ERROR" << endl; } }}char output_title[] = "contrast and brightness change demo";imshow(output_title, dst);waitKey(0);return 0; }
以上代码首先加载输入图像,进行灰度转换,然后通过循环遍历每个像素,分别调整亮度和对比度。通过调整alpha和beta参数,可以控制对比度和亮度。最终展示调整后的图像。
转载地址:http://hmsfk.baihongyu.com/