伽马校正-「建议收藏」

伽马校正-「建议收藏」伽马校正问题描述:读取图像,然后对图像进行伽玛校正。伽马校正这里是一篇写伽马校正比较好的文章,我觉得可以作为背景知识补充。伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大RGB的值来排除显示器的影响,达到对图像修正的目的。由于下式引起非线性变换,在该式中,xxx被归一化,限定在[0,1][0,1][0,1]范围内。ccc是常数,ggg为伽马变量(通常取2.22.22.2):x′=c Iingx

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

伽马校正


问题描述:读取图像,然后对图像进行伽玛校正。

伽马校正

这里是一篇写伽马校正比较好的文章,我觉得可以作为背景知识补充。
伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大 RGB 的值来排除显示器的影响,达到对图像修正的目的。

由于下式引起非线性变换,在该式中, x x x被归一化,限定在 [ 0 , 1 ] [0,1] [0,1]范围内。 c c c是常数, g g g为伽马变量(通常取 2.2 2.2 2.2):
x ′ = c   I i n g x’ = c\ {I_{in}}^ g x=c Iing
因此,使用下面的式子进行伽马校正:
I o u t = 1 c   I i n 1 g I_{out} ={\frac{1}{c}\ I_{in}} ^ {\frac{1}{g}} Iout=c1 Iing1

显示屏上的图像显示 γ \gamma γ修正值
在这里插入图片描述 在这里插入图片描述
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <math.h>

cv::Mat gamma_correction(cv::Mat img, double c, double g)
{ 
   
    int row = img.rows;
    int col = img.cols;
    int channel = img.channels();

    cv::Mat new_image = cv::Mat::zeros(row, col, CV_8UC3);

    double val;

    // gamma_correction
    for (int i = 0; i < row; i++)
    { 
   
        for (int j = 0; j < col; j++)
        { 
   
            for (int chan = 0; chan < channel; chan++)
            { 
   
                val = (double)img.at<cv::Vec3b>(i, j)[chan] / 255;
                new_image.at<cv::Vec3b>(i, j)[chan] = (uchar)(pow(val / c, 1 / g) * 255);
            }
        }
    }

    return new_image;
}


int main(){ 
   
    // read image
    cv::Mat img = cv::imread("../imori_gamma.jpeg", cv::IMREAD_COLOR);

    // histogram_normalization
    cv::Mat new_image =  gamma_correction(img, 1, 2.2);

    cv::imwrite("../1-10/imori_gamma_correction.jpeg", new_image);
    cv::imshow("vv", new_image);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}
输入图像 (imori_dark.jpeg) 输出图像 (histogram_transform.jpeg)
在这里插入图片描述 在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189703.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 汇微商app v4.0.1官方iPhone版

    汇微商app v4.0.1官方iPhone版微信加粉完全免费,分行业类别,精确加粉,自动匹配筛选,拒绝僵尸粉,让你彻底解决烦恼。

  • java与数据库连接的步骤_java与数据库的连接怎么实现

    java与数据库连接的步骤_java与数据库的连接怎么实现1.加载驱动Class.forname(数据库驱动名);2.建立数据库连接使用DriverManager类的getConnection()静态方法来获取数据库连接对象,其语法格式如下所示:Connectionconn=DriverManager.getConnection(Stringurl,Stringuser,Stringpass);其中url–数据库连接字符串….

  • scriptmanager控件使用

    scriptmanager控件使用今天用到scriptmanager,顺便整理一下。—————————-网络资料—————————————————-一.控件概述  ScriptManager控件包括在ASP.NET2.0AJAXExtensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客

  • AndroidStudio入门基础(一)——基础布局

    AndroidStudio入门基础(一)——基础布局写在前面:上学期学习了Android,从一开始的什么都不懂到后来成功做出一个课程设计作品,回忆起来一路还是充满坎坷和辛酸泪的啊。遗忘是可怕的,为了防止以后把好不容易学到的东西忘得一干二净,我打算写一系列的AndroidStudio教程记录一些有用的知识点,当然,我会从最基础的地方写起,希望可以帮助到一些初学者~最后,如果时间和精力允许的情况下,我会一步步的还原我的课程设计,喵喵喵~(…

  • 云打码注册以及使用「建议收藏」

    云打码注册以及使用「建议收藏」这里用云打码演示:http://www.yundama.com/about.html需要注册两个账号,1.普通用户(充值金额),2.开发者用户(创建软件使用)题分和价格表链接:http://www

  • sched.h (版本4.16.7全部内容)

    sched.h (版本4.16.7全部内容)/*SPDX-License-Identifier:GPL-2.0*/#ifndef_LINUX_SCHED_H#define_LINUX_SCHED_H/**Define’structtask_struct’andprovidethemainscheduler*APIs(schedule(),wakeupvariants,etc.)*/…

    2022年10月22日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号