基于opencv的图像校正_伽马校正怎么设置

基于opencv的图像校正_伽马校正怎么设置#include"stdafx.h"#include<cmath>#include<iostream>#include<opencv2\core\core.hpp>#include<opencv2\highgui\highgui.hpp>#include<opencv2\imgproc\imgproc.hp…

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

Jetbrains全系列IDE稳定放心使用

#include "stdafx.h"
#include <cmath>
#include <iostream>  

#include <opencv2\core\core.hpp>  
#include <opencv2\highgui\highgui.hpp>  
#include <opencv2\imgproc\imgproc.hpp>  

using namespace cv;
using namespace std;

float get_Gamma_Value(Mat& gray_img);

void create_Gamma_Table(unsigned char* gama_table, float gama_value);

void Gamma_Correction(Mat& gray_img, Mat& dst_img, unsigned char* gama_table);

int _tmain(int argc, _TCHAR* argv[])
{
	char input_image_name[100];
	char output_image_name[100];
	int image_num = 476;

	for (int i = 1; i <= image_num; i++)
	{
		sprintf(input_image_name, "../%s\\%d.jpg","temp", i);
		Mat input_image = imread(input_image_name);

		if (input_image.empty())
		{
			cout << "Failed to load image !" << endl;
			continue;;
		}

		Mat gray_image;
		cvtColor(input_image, gray_image, CV_BGR2GRAY);

		// Start a timer
		double duration;
		duration = static_cast<double>(cv::getTickCount());

		float gama_value = get_Gamma_Value(gray_image);

		unsigned char LUT[256];
		create_Gamma_Table(LUT, gama_value);

		Mat result_image(gray_image.rows, gray_image.cols, gray_image.type());
		Gamma_Correction(gray_image, result_image, LUT);

		// Calculate the time cost and print
		duration = static_cast<double>(cv::getTickCount()) - duration;
		duration /= cv::getTickFrequency();
		std::cout << duration * 1000 << " ms" << std::endl;

		imshow("Source_Image", input_image);
		imshow("Gamma_Correction", result_image);
		//imwrite("test6.bmp",result_image);

		waitKey(1);
	}

	return 0;
}

/****************************************************
①当Gamma值比1大时,在输入值相同的情况下,输出值减小;
②当Gamma值为1时,输出值不变;
③当Gamma值比1小时,在输入值相同的情况下,输出值增加。
****************************************************/
//公式:gamma = log(y/range)/ log(x/range),x是整幅图像像素的平均值,y是像素值最大范围的一半。

//先计算灰度图像的像素均值mean,将计算出来的均值带入 gammaVal = log(mean/255)/log(0.5) 这个公式中,就可以得到Gamma值了。
float get_Gamma_Value(Mat& gray_img)
{
	if (gray_img.empty())
	{
		return -1.0;
	}

	cv::Scalar meam_value = cv::mean(gray_img);

	float val = meam_value.val[0];
	//float gamma_val = (log10(val / 255.0)) / (log10(0.5));
	float gamma_val = (log10(0.5)) / (log10(val / 255.0));

	return gamma_val;
}

void create_Gamma_Table(unsigned char* gama_table, float gama_value)
{
	for (int i = 0; i < 256; i++)
	{
		float f = (i + 0.5f) / 255.0;
		f = (float)(pow(f, gama_value));
		gama_table[i] = saturate_cast<uchar>(f * 255.0f - 0.5f);
	}
}

void Gamma_Correction(Mat& gray_img, Mat& dst_img, unsigned char* gama_table)
{
	if(gray_img.channels() != dst_img.channels() || gray_img.cols != dst_img.cols || gray_img.rows != dst_img.rows)
	{
		return;
	}

	for (int i = 0; i < gray_img.rows; i++)
	{
		for (int j = 0; j < gray_img.cols; j++)
		{
			dst_img.at<uchar>(i, j) = gama_table[(int)(gray_img.at<uchar>(i, j))];
		}
	}
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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

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

(0)


相关推荐

  • 关于setContentView方法

    关于setContentView方法转载请以链接形式标明出处:本文出自:103style的博客baseonAndroid-29文中相关的源码有删减可以带着以下问题来看本文:为什么从代码设置属性和主题,得在setContentView之前?setContentView添加的View加载完成的回调方法?setContentView的执行流程?LayoutInflater的inflate方法不…

  • 管理sql server表数据_sql server如何使用

    管理sql server表数据_sql server如何使用表是SQL Server中最基本的数据库对象,用于存储数据的一种逻辑结构,由行和列组成, 它又称为二维表。例如,在学生成绩管理系统中,表1–是一个学生表(student)。(1)表表是数据库中存储数据的数据库对象,每个数据库包含了若干个表,表由行和列组成。例如,表1–由6行6列组成。(2)表结构每个表具有一定的结构,表结构包含一组固定的列,由数据类型、长度、允许Null值等组成…

  • 安装好Ubuntu18.04之后要做的事!!大全、详细教程!

    安装好Ubuntu18.04之后要做的事!!大全、详细教程!安装Ubuntu18.04之后的要做的事:1、更新源,使用软件更新器选择中国的服务器aliyun即可自动更新缓存,已经各种软件之后每天更新,shell更新:sudoaptupdatesudoaptupgrade2、安装vim、wget、curlsudoaptinstallvim配置十字光标:用户目录下vim.vimrc…

  • ubuntu修改hostname

    在Ubuntu系统中,快速查看主机名有多种方法:其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后;其二,在终端窗口中输入命令:hostname或uname–

    2021年12月23日
  • python批量生成测试用例_根据接口文档生成测试用例

    python批量生成测试用例_根据接口文档生成测试用例前言写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。har2case我们先来了解一下另一个项目har2case他的工作原理就是将当前主流的抓

  • 911完整记录_入院记录书写

    911完整记录_入院记录书写本文记录了打PSU的全过程,意在体会数据库打PSU补丁的整个过程。1.OPatch替换为最新版本2.数据库软件应用19121551补丁程序3.数据库应用补丁4.验证PSU补丁是否应用成功1.OPatch替换为最新版本[oracle@DBusr2]$iduid=500(oracle)gid=500(oinstall)组=500(oinstall),501(dba)环境=…

    2022年10月15日

发表回复

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

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