【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...

这篇具有很好参考价值的文章主要介绍了【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...,opencv,人工智能,计算机视觉

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...,opencv,人工智能,计算机视觉

#include "opencv2/core/utility.hpp" // 包含OpenCV核心工具库的头文件
#include "opencv2/imgproc.hpp" // 包含OpenCV图像处理的头文件
#include "opencv2/imgcodecs.hpp" // 包含OpenCV图像编码解码的头文件
#include "opencv2/highgui.hpp" // 包含OpenCV高层GUI(图形用户界面)的头文件


#include <iostream> // 包含标准输入输出流的头文件


// 使用命名空间cv和std,避免每次调用OpenCV和标准库函数时都需要前缀
using namespace cv;
using namespace std;


// 全局变量,分别用于存储亮度和对比度的值
int _brightness = 100;
int _contrast = 100;


Mat image; // 全局变量,用于存储图像矩阵


/* 亮度/对比度调整回调函数 */
static void updateBrightnessContrast( int /*arg*/, void* )
{
    int histSize = 64; // 定义直方图的大小
    int brightness = _brightness - 100; // 计算新的亮度值
    int contrast = _contrast - 100; // 计算新的对比度值


    /*
     * 使用Werner D. Streidt的算法来调整亮度和对比度
     * (参见http://visca.com/ffactory/archives/5-99/msg00021.html)
     */
    double a, b;
    if( contrast > 0 )
    {
        double delta = 127.*contrast/100; // 计算对比度增量
        a = 255./(255. - delta*2); // 根据对比度增量计算系数a
        b = a*(brightness - delta); // 根据对比度增量和亮度计算系数b
    }
    else
    {
        double delta = -128.*contrast/100; // 计算对比度减量
        a = (256.-delta*2)/255.; // 根据对比度减量计算系数a
        b = a*brightness + delta; // 根据对比度减量和亮度计算系数b
    }


    Mat dst, hist; // 定义目标图像和直方图矩阵
    image.convertTo(dst, CV_8U, a, b); // 应用亮度和对比度的调整并转换图像格式
    imshow("image", dst); // 显示调整后的图像


    // 计算调整后图像的直方图
    calcHist(&dst, 1, 0, Mat(), hist, 1, &histSize, 0);
    Mat histImage = Mat::ones(200, 320, CV_8U)*255; // 创建直方图的图像


    // 对直方图进行归一化操作
    normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, CV_32F);


    histImage = Scalar::all(255); // 设置直方图图像的背景为白色
    int binW = cvRound((double)histImage.cols/histSize); // 计算每个bin的宽度


    // 绘制直方图
    for( int i = 0; i < histSize; i++ )
        rectangle( histImage, Point(i*binW, histImage.rows),
                   Point((i+1)*binW, histImage.rows - cvRound(hist.at<float>(i))),
                   Scalar::all(0), -1, 8, 0 );
    imshow("histogram", histImage); // 显示直方图
}


// keys字符串定义了程序可以接受的命令行参数
const char* keys =
{
    "{help h||}{@image|baboon.jpg|input image file}"
};


// 程序主函数
int main( int argc, const char** argv )
{
    CommandLineParser parser(argc, argv, keys); // 创建命令行参数解析器
    parser.about("\nThis program demonstrates the use of calcHist() -- histogram creation.\n");
    if (parser.has("help")) // 如果提供了帮助标志,则打印帮助信息
    {
        parser.printMessage();
        return 0;
    }
    string inputImage = parser.get<string>(0); // 获取输入的图像文件


    // 读取源图像,使用高级GUI
    image = imread(samples::findFile(inputImage), IMREAD_GRAYSCALE); // 以灰度模式读取图像
    if(image.empty()) // 如果读取图像失败,则打印错误信息并退出
    {
        std::cerr << "Cannot read image file: " << inputImage << std::endl;
        return -1;
    }


    // 创建显示窗口
    namedWindow("image", 0);
    namedWindow("histogram", 0);


    // 创建轨迹条以调整亮度和对比度,并设置回调函数
    createTrackbar("brightness", "image", &_brightness, 200, updateBrightnessContrast);
    createTrackbar("contrast", "image", &_contrast, 200, updateBrightnessContrast);


    // 使用默认值更新亮度和对比度
    updateBrightnessContrast(0, 0);
    waitKey(); // 等待用户按键


    return 0; // 程序正常退出
}

这段代码是使用C++和OpenCV库编写的图像处理程序,其主要功能是调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。用户可以通过界面上的滑动条来动态地调整亮度和对比度参数从而观察到图像即时的变化效果。程序首先读取并显示一个灰度图像,然后响应用户的交互输入来更新图像显示和直方图。

image.convertTo(dst, CV_8U, a, b);

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...,opencv,人工智能,计算机视觉

calcHist(&dst, 1, 0, Mat(), hist, 1, &histSize, 0);

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...,opencv,人工智能,计算机视觉

normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, CV_32F);

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...,opencv,人工智能,计算机视觉文章来源地址https://www.toymoban.com/news/detail-846293.html

到了这里,关于【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV改变图像的对比度和亮度

    在本教程中,您将学习如何: 访问像素值 用零初始化矩阵 了解 cv::saturate_cast 的作用以及它为什么有用 获取有关像素转换的一些很酷的信息 在实际示例中提高图像的亮度 注意 下面的解释属于Richard Szeliski的《计算机视觉:算法和应用》一书 图像处理 一般图像处理算子是

    2024年02月21日
    浏览(52)
  • OpenCV增加图像的亮度及对比度

    案例:输出一张原图,增加该图片的亮度及对比度 基本概念: 亮度:RGB的像素值范围是0~255,我们称从0——255随着像素值的增加图像会越来月亮,反之会越来越暗。所以我们可以通过对图像像素加减来改变图像的亮度。 对比度:其反应的是图像中各像素的差异(层次感、落

    2024年02月12日
    浏览(46)
  • C#使用OpenCv(OpenCVSharp)图像处理实例:亮度、对比度、灰度

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行亮度、对比度、灰度处理。 目录 亮度和对比度原理 灰度 实例 图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越

    2024年02月13日
    浏览(75)
  • 3d模型素材亮度和对比度如何调整呢?

    1、修改材质参数:打开3ds Max后,选择要调整亮度和对比度的3D模型素材。然后,进入材质编辑器,选择相应的材质球。在材质编辑器中,你可以调整材质的漫反射、反射和高光等参数,这些参数将影响模型的亮度和对比度。通过调整参数,你可以使模型素材更加明亮或昏暗,

    2024年01月19日
    浏览(58)
  • FFmpeg滤镜: 调整视频的亮度-对比度-饱和度

    亮度是指图片的明暗程度,对比度是指图片明暗的差异,饱和度则是指图片颜色的饱满程度。在计算机中每个图片上的像素点都由三个字节来进行表示,分别代表着像素的RGB数据。 图片上每个像素的每种颜色都可以有从0到255的变化,数值越高,颜色的亮度越大,因此当改变

    2024年02月13日
    浏览(63)
  • Opencv C++图像处理:亮度+对比度+饱和度+高光+暖色调+阴影+漫画效果+白平衡+浮雕+羽化+锐化+颗粒感

    更多详细信息请看:OpenCV专栏:翟天保Steven

    2024年02月04日
    浏览(54)
  • 数字图像处理:亮度对比度-几何变换-噪声处理

    亮度与对比度转换 图像变换可分为以下两种: 点算子:基于像素变换,在这一类图像变换中,仅仅根据输入像素值计算相应的输出像素值 邻域算子:基于图像区域进行变换 两种常用的点算子是用常数对点的像素值进行乘法或加法运算,可以表示为: g ( i , j ) = α ∗ f ( i ,

    2024年02月10日
    浏览(61)
  • OpenCvSharp学习笔记6--改变图像的对比度和亮度

    访问像素值mat.AtT(y,x) 用0初始化矩阵Mat.Zeros 饱和操作SaturateCast.ToByte g(x)=αf(x)+β 用α(0)和β一般称作增益(gain)和偏置(bias),分别控制对比度和亮度 把f(x)看成源图像像素,把g(x)看成输出图像像素 g(i,j)=α⋅f(i,j)+β 其中,i和j表示像素位于 第i行 和 第j列(左上角为第0行、第0列) M

    2024年02月03日
    浏览(61)
  • 使用OpenCV处理图片的亮度、对比度、曝光、高光、阴影、饱和度、色温,色相(附源码)

    屏幕录制2023-05-22 22.09.32 集成opencv的方式请参照上一个帖子 OpenCV在iOS端的集成及Mat和UIImage互相转化(附源码) 废话不多说直接上代码,伸手党福利: 代码中记得引入头文件及命名空间 下面的处理方法统一对使用最多的8bit图片处理,如果是16bit的图片需要修改对应的格式,在

    2024年02月11日
    浏览(39)
  • opencv-图像对比度增强

    对比度增强,即将图片的灰度范围拉宽,如图片灰度分布范围在[50,150]之间,将其范围拉升到[0,256]之间。这里介绍下 线性变换,直方图正规化,伽马变换,全局直方图均衡化,限制对比度自适应直方图均衡化等算法。 线性变换 通过函数y=ax+b对灰度值进行处理,例如对于过暗

    2024年01月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包