首页 > 其他分享 >OpenCV(图像明度)

OpenCV(图像明度)

时间:2024-09-22 21:50:14浏览次数:8  
标签:src brightness int 明度 像素 OpenCV 图像

目录



1. 图像明度(Brightness)

明度(Brightness)是图像中反映光亮程度的一个属性,通常用于描述像素的亮度水平。

对于RGB图像,明度(Luminance)每个像素中红、绿、蓝通道的加权和。

\[\text{Luminance} = 0.299 \times R + 0.587 \times G + 0.114 \times B \]

这个公式是基于人眼对不同颜色的敏感度,绿光对明度的贡献最大,红光次之,蓝光最小。



2. 明度调整的原理

调整明度的基本原理是对每个像素的RGB值进行加减操作,使像素的整体亮度提高或降低。

\[R' = \text{Clamp}(R + \Delta) \\ G' = \text{Clamp}(G + \Delta) \\ B' = \text{Clamp}(B + \Delta) \]

其中 \(\Delta\) 是明度调整的量,\(Clamp()\) 函数用于确保值在0到255的范围内。



3. 示例

用于调整RGB图像的明度。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

// 调整明度的函数
void adjustBrightness(const Mat& src, Mat& dst, int brightness) {
    // 创建输出图像,并初始化为与原图像相同的尺寸和类型
    dst = Mat::zeros(src.size(), src.type());
    
    // 遍历每个像素并调整明度
    for (int y = 0; y < src.rows; y++) {
        for (int x = 0; x < src.cols; x++) {
            for (int c = 0; c < src.channels(); c++) {
                // 调整RGB通道中的每个像素值,并确保结果在[0, 255]范围内
                dst.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(src.at<Vec3b>(y, x)[c] + brightness);
            }
        }
    }
}

int main(int argc, char** argv) {
    // 读取输入图像
    Mat src = imread("input_image.jpg");
    if (src.empty()) {
        cout << "无法打开图像文件" << endl;
        return -1;
    }

    // 定义输出图像
    Mat dst;

    // 明度调整值,可以是正数或负数
    int brightness = 50; // 增加50单位的亮度

    // 调用调整明度的函数
    adjustBrightness(src, dst, brightness);

    // 显示原图和调整后的图像
    imshow("Original Image", src);
    imshow("Brightness Adjusted Image", dst);

    // 保存调整后的图像
    imwrite("output_image.jpg", dst);

    // 等待按键
    waitKey(0);

    return 0;
}

代码说明:

  1. adjustBrightness() 函数:遍历图像的每个像素,对每个RGB通道的值加上 brightness 参数的值。使用 saturate_cast<uchar> 来确保像素值在0到255之间,防止溢出或下溢。

  2. 主程序:读取输入图像,调用 adjustBrightness() 函数来调整图像的亮度,并显示原始图像和处理后的图像。

结果:

  • brightness 为正值时,图像整体会变得更亮。
  • brightness 为负值时,图像整体会变得更暗。

这种方法非常直观,但也存在局限性,例如如果过度提高亮度,可能会导致图像细节丢失或过度曝光。因此,实际应用中通常需要结合其他图像处理技术来改善效果。



标签:src,brightness,int,明度,像素,OpenCV,图像
From: https://www.cnblogs.com/keye/p/18425990

相关文章

  • Opencv边界填充、图像数值、图像融合与形态学运算处理方法
     首先导入库和图片,图片根据自己的路径修改importnumpyasnpimportcv2importmatplotlib.pyplotasplt%matplotlibinline#readimg1andimg2img1=cv2.imread(r'material\b.png')img2=cv2.imread(r'material\a.png')img3=cv2.imread(r'material......
  • 智能图像水位识别监测系统
    智能图像水位识别监测系统利用两岸已有的监控摄像头对河道江河湖泊等区域进行实时监测,当智能图像水位识别监测系统监测到水位刻度尺超标时立即抓拍告警同步回传给后台监控平台方便人员及时处理。水位起伏变化,水利水灾往往系于一线之间。智能图像水位识别监测系统现实意义价值重大......
  • 高等数学 3.6 函数图像的描绘
    利用导数描绘函数图形的一般步骤如下:(1)确定函数\(y=f(x)\)的定义域及函数所具有的某些特性(如奇偶性、周期性等),并求出函数的一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\);(2)求出一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\)在函数定义域内的全部零点,并求出函数\(f(x)......
  • OpenCV(图像饱和度)
    目录1.图像饱和度2.调整饱和度的基本原理3.示例3.1对RGB图像进行饱和度的调整。3.2对RGB图像进行饱和度的调整。4.调整饱和度的影响1.图像饱和度饱和度(Saturation)指的是颜色的纯度或浓度,决定了颜色的鲜艳程度。高饱和度的颜色看起来更加鲜艳,而低饱和度的颜色则显得......
  • 数字图像面积计算一般方法及MATLAB实现
    一、引言     在数字图像处理中,经常需要获取感兴趣区域的面积属性,下面给出图像处理的一般步骤。1.读入的彩色图像 2.将彩色图像转化为灰度图像  3.灰度图像转化为二值图像 4.区域标记5.对每个区域的面积进行计算和显示二、程序代码%面积计算clearall; %......
  • OpenCV(cv::saturate_cast())
    目录1.函数定义2.为什么需要saturate_cast()?3.工作原理4.示例代码:4.1将浮点数转换为uchar4.2将负数转换为uchar4.3普通类型转换5.主要优点总结cv::saturate_cast()是OpenCV中一个非常重要的函数,它用于将一个值强制转换为指定类型,并确保值不会超出取值范围。它主......
  • 如何使用 HTML 和 CSS 使图像在悬停时旋转
    图像上的悬停旋转效果可以使您的内容更具吸引力和互动性。在本教程中,我们将引导您了解如何仅使用html和css创建简单但引人注目的悬停旋转效果。如何创造效果html:首先,添加以下html代码:<figureclass="hover-rotate">@@##@@</figure>登录后复制您可以添加任何......
  • OPENCV入门总结
        在近期对计算机视觉的学习中,有一些心得与感受和大家一起分享,并且也说一些我做题目用到的函数和一些常见错误TEST1:图像边框对矩形的轮廓识别与绘制,难点在于利用色彩来选中红色图形与绿色图形进行处理(后面的几个题也是利用了相同的方法对图像进行特定操作)我们在......
  • 第152期 利用光谱和图像数据,揭开苹果叶片病虫害之谜(目标检测)
    亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。一、引言苹果作为全球广泛种植的水果之一,在中国拥有庞大的种植面积和总产量。然而,随着......
  • 第154期 智能手机图像去噪数据集的创新构建与实践运用(目标检测)
    亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。一、引言随着智能手机摄影技术的飞速发展,其成像质量已经逐渐接近甚至在某些场景下超越......