伽马校正-「建议收藏」

伽马校正-「建议收藏」伽马校正问题描述:读取图像,然后对图像进行伽玛校正。伽马校正这里是一篇写伽马校正比较好的文章,我觉得可以作为背景知识补充。伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大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)
在这里插入图片描述 在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1/7的小数点后2020位的数字是_如果把数字5写在某自然数右端

    1/7的小数点后2020位的数字是_如果把数字5写在某自然数右端给定长度为 N 的整数序列 A,下标为 1∼N。现在要执行 M 次操作,其中第 i 次操作为给出三个整数 li,ri,ki,求 A[li],A[li+1],…,A[ri] (即 A 的下标区间 [li,ri])中第 ki 小的数是多少。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,表示整数序列 A。接下来 M 行,每行包含三个整数 li,ri,ki,用以描述第 i 次操作。输出格式对于每次操作输出一个结果,表示在该次操作中,第 k 小的数的数值。每个结果占一行。数据范围

    2022年8月10日
    6
  • 脚本是什么?[通俗易懂]

    脚本是什么?[通俗易懂]初次接触“脚本”一词并不知道这一听似非常高大上的东西是什么,尔后逐渐接触,虽有了解,但也没有仔细地总结和思考过,今日百度了一下,在此小小总结。“脚本”其实就是一段代码,一个程序。这与我们学习C语言时,写的第一个“helloworld”显示程序没有太大的区别,那为什么这个向程序之神打招呼的“helloworld”程序我们不称其为脚本呢?因为“脚本”有这些特别之处:1、脚本语法比较简单…

    2025年7月26日
    3
  • 在anaconda中安装pycharm_anaconda和pycharm关联

    在anaconda中安装pycharm_anaconda和pycharm关联经历了装软件的头疼阶段后,终于搞明白Anaconda,python,Pycharm之间的关系及各种python包的安装了一、Anaconda,python,Pycharm1、如果要使用python进行深度学习的话首先需要一个开发环境,说白了就是编python程序的一个软件,这个一般选pycharm比较方便。2、接着需要在pycharm中加载一个python的编译器,这个时候安装一个python即可,网上搜【python安装教程】会有很多。3、也可以安装Anaconda然后pycharm里的编译器选

    2022年8月29日
    3
  • CListCtrl 使用大全

    CListCtrl 使用大全转载文章:今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下:以下未经说明,listctrl默认view风格为report相关类及处理函数MFC:CListCtrl类SDK:以“ListView_”开头的一些宏。如ListView_InsertColumn1.CListCtrl风格

    2022年6月23日
    23
  • 关于java的书籍文献_参考文献解释

    关于java的书籍文献_参考文献解释一、SpringCloud1.服务发现EurekaEureka的高可用ConsulConsul安装与使用Consul常用命令Consul高可用2.服务提供者3.服务消费者RibbonFeign4.熔断器HystrixHystrixDashboardTurbine5.配置中心6.APIGateway二、使用Docker构建微服务1.Docker介绍2.Docker的安装3.Docker的常用命令4.Dockerfile

    2022年9月29日
    3
  • 机器学习之–神经网络算法原理

    机器学习之–神经网络算法原理转自:https://blog.csdn.net/lyl771857509/article/details/78990215神经网络好了,前面花了不少篇幅来介绍激活函数中那个暗藏玄机的e,下面可

    2022年8月3日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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