大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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账号...