三天学会opencv(六)——调整图像亮度与对比度

简介: 三天学会opencv(六)——调整图像亮度与对比度

调整图像亮度与对比度


主要内容


  1. 理论
  2. 代码

理论


图像变换可以看作如下:

  • 像素变换 – 点操作
  • 邻域操作 – 区域
    调整图像亮度和对比度属于像素变换-点操作

代码


Mat m1;
src.convertTo(m1, CV_32F);
for (int row = 0; row < height; row++) {
  for (int col = 0; col < width; col++) {
    if (src.channels() == 3) {
      float b = m1.at<Vec3f>(row, col)[0];// blue
      float g = m1.at<Vec3f>(row, col)[1]; // green
      float r = m1.at<Vec3f>(row, col)[2]; // red
      // output
      dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b*alpha + beta);
      dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g*alpha + beta);
      dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r*alpha + beta);
    }
    else if (src.channels() == 1) {
      float v = src.at<uchar>(row, col);
      dst.at<uchar>(row, col) = saturate_cast<uchar>(v*alpha + beta);
    }
  }
}

这里我们可以看出我们对图像的BGR三个通道都进行了增益,也就是在每一个像素上,对这三个值都加上了beta,这样就达到了增益的效果。同时为了限制像素值在0-255之间,我们上定了一个限制。也就是saturate_cast()函数。

相关文章
|
6天前
|
算法 计算机视觉
OpenCV高斯差分技术实现图像边缘检测
OpenCV高斯差分技术实现图像边缘检测
|
8天前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
11 0
|
8天前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
5 0
|
8天前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
10 0
|
8天前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
10 0
|
8天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
8天前
|
算法 计算机视觉
【OpenCV】- 图像修复
【OpenCV】- 图像修复
|
8天前
|
Serverless 计算机视觉
【OpenCV】-图像的矩
【OpenCV】-图像的矩
|
8天前
|
编解码 物联网 计算机视觉
【OpenCV】—图像金子塔与图片尺寸缩放
【OpenCV】—图像金子塔与图片尺寸缩放
|
8天前
|
前端开发 计算机视觉 C++
【OpenCV】—分离颜色通道、多通道图像混合
【OpenCV】—分离颜色通道、多通道图像混合