灰度变换原理//test later

2023-09-15 15:13:01

灰度变换原理

图像灰度变换变换原理:通过变换函数T将原图像像素灰度值r映射为灰度值s:

2、灰度反转

2.1原理

灰度反转:将图像亮暗对调,可以增强图像中暗色区域细节

�=�(�)=�−1−�

其中L为图像灰度级,0~255灰度图像的灰度级为256.

2.2 c++ opencv代码

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{ 
	Mat image1, output_image, image1_gray;   //定义输入图像,输出图像,灰度图像
	image1 = imread("lena.png");  //读取图像;
	if (image1.empty())
	{
		cout << "读取错误" << endl;
		return -1;
	}

	cvtColor(image1, image1_gray, COLOR_BGR2GRAY);  //灰度化
	imshow(" image1_gray", image1_gray);   //显示灰度图像

	output_image = image1_gray.clone();
	for (int i = 0; i < image1_gray.rows; i++)
	{
		for (int j = 0; j < image1_gray.cols; j++)
		{
			output_image.at<uchar>(i, j) = 255 - image1_gray.at<uchar>(i, j);  //灰度反转
		}
	}
	imshow("output_image", output_image);  //显示反转图像


	waitKey(0);  //暂停,保持图像显示,等待按键结束
	return 0;
}

结果:

3、对数变换

3.1原理

对数变换:扩展图像中的暗像素值,压缩高灰度值。

�=�(�)=�∗���(1+�)

3.2 c++ opencv

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{ 
	Mat image1, output_image, image1_gray;   //定义输入图像,输出图像,灰度图像
	image1 = imread("lena.png");  //读取图像;
	if (image1.empty())
	{
		cout << "读取错误" << endl;
		return -1;
	}

	cvtColor(image1, image1_gray, COLOR_BGR2GRAY);  //灰度化
	imshow(" image1_gray", image1_gray);   //显示灰度图像

	output_image = image1_gray.clone();
	for (int i = 0; i < image1_gray.rows; i++)
	{
		for (int j = 0; j < image1_gray.cols; j++)
		{
			output_image.at<uchar>(i, j) =6*log((double)(image1_gray.at<uchar>(i, j))+1);  //对数变换 s=6*log(r+1)
		}
	}
	normalize(output_image, output_image, 0, 255, NORM_MINMAX);  //图像归一化,转到0~255范围内
	convertScaleAbs(output_image, output_image);  //数据类型转换到CV_8U
	imshow(" output_image", output_image);  //显示变换图像


	waitKey(0);  //暂停,保持图像显示,等待按键结束
	return 0;
}

结果:

4、幂律(伽马变换)

4.1原理

幂律变换与对数变换类似:

4.2 c++ opencv代码

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{ 
	Mat image1, output_image, image1_gray;   //定义输入图像,输出图像,灰度图像
	image1 = imread("lena.png");  //读取图像;
	if (image1.empty())
	{
		cout << "读取错误" << endl;
		return -1;
	}

	cvtColor(image1, image1_gray, COLOR_BGR2GRAY);  //灰度化
	imshow(" image1_gray", image1_gray);   //显示灰度图像

	output_image = image1_gray.clone();
	for (int i = 0; i < image1_gray.rows; i++)
	{
		for (int j = 0; j < image1_gray.cols; j++)
		{
			output_image.at<uchar>(i, j) =6*pow((double)image1_gray.at<uchar>(i, j),0.5);  //幂律变换 s=6*r^0.5
		}
	}
	normalize(output_image, output_image, 0, 255, NORM_MINMAX);  //图像归一化,转到0~255范围内
	convertScaleAbs(output_image, output_image);  //数据类型转换到CV_8U
	imshow(" output_image", output_image);  //显示变换图像


	waitKey(0);  //暂停,保持图像显示,等待按键结束
	return 0;
}

结果:

更多推荐

2023,DaaS驶入“AI大航海时代”

2023,“制胜”已然成为所有行业、企业的共同命题,随着数字化行至中程,数据壁垒逐渐被打破,DaaS作为企业增长问题的解法,再次被看到。作者|斗斗编辑|皮爷出品|产业家2002年,在竞争激烈的美国职业棒球联盟,奥克兰运动家队无论在人员和物质配备以及资金实力上都只是“下三流”之列。然而在数据分析高材生的帮助下,经过分析数

RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133022813红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开

HBase基本操作及命令示例

HBase是一种分布式、可扩展、面向列的数据库,它是由Google的Bigtable项目衍生而来,并由Apache软件基金会开发及维护。对于HBase的基本操作类型,主要包括以下几种:创建表:在HBase中,可以创建一个新的表来存储数据。创建表时,需要定义表的名称以及表的列族。命令示例:create'table_nam

ASP.NET Core 8 的 Web App

WebAppWebApp与WebAPI的不同之处在于包含UI部分,所谓的UI就是HTML页面。WebApp支持几种渲染HTML的方式:服务端渲染客户端渲染混合渲染服务端渲染服务端渲染UI是在浏览器请求的时候,服务端生成HTML,然后返回给浏览器。优点是:减轻客户端的压力服务端生成HTML,适配各种浏览器极少从Clien

前端常用库之-JavaScript工具库lodash

文章目录前端常用库之-JavaScript工具库lodash一、什么是lodash二、安装三、lodash使用Lodash的pick()函数介绍和使用react实例demo:pick结合...展开运算符(spreadoperator)前端常用库之-JavaScript工具库lodash一、什么是lodash官网:htt

炒期权的资金门槛是多少 ?

期权是一种合约,买方向卖方支付一定费用后有权利在特定的时间,以特定的价格买入或卖出一定数量的特定资产,卖方需履行相应义务,期权开户支持线上和零门槛开头,下文介绍炒期权的资金门槛是多少?本文来自:期权酱一、期权一般投入多少钱?其实在期权市场上,绝大部分投资者都是中小型投资者,也就意味着期权投资不需要多少钱,几十几百几千元

【新版】系统架构设计师 - 案例分析 - 信息安全

个人总结,仅供参考,欢迎加好友一起讨论文章目录架构-案例分析-信息安全安全架构安全模型分类BLP模型Biba模型ChineseWall模型信息安全整体架构设计WPDRRC模型各模型安全防范功能网络安全体系架构设计开放系统互联安全体系结构安全服务与安全机制的对应关系认证框架访问控制框架机密性框架完整性框架抗抵赖框架什么是

PyTorch中ReduceLROnPlateau的学习率调整优化器

PyTorch中ReduceLROnPlateau的学习率调整优化器作者:安静到无声个人主页简介:在深度学习中,学习率是一个重要的超参数,影响模型的收敛速度和性能。为了自动调整学习率,PyTorch提供了ReduceLROnPlateau优化器,它可以根据验证集上的性能指标自动调整学习率。本文将详细介绍ReduceLR

Language Adaptive Weight Generation for Multi-task Visual Grounding 论文阅读笔记

LanguageAdaptiveWeightGenerationforMulti-taskVisualGrounding论文阅读笔记一、Abstract二、引言三、相关工作3.1指代表达式理解3.2指代表达式分割3.3动态权重网络四、方法4.1总览4.2语言自适应权重生成语言特征聚合权重生成4.3多任务头4.4训练目标

Vue中的动态 Class & Style

动态Class&Style我们平时可以直接给元素设置静态的Class或者是Style,但是这种方式会带来很多限制,假设我想要内容动态的改变Class或者是Style,通过原生的方式要通过JavaScript频繁操作dom才能够实现。而在Vue中我们无需关心内部实现原理,可以直接给元素的Class、Style绑定一个变量

自动化测试的类型​以及自动化测试的几个误区!

有三种主要类型的自动化测试。一、自动化单元测试​编辑自动化单元测试在代码级别上进行测试。bug是在开发人员编写的函数、方法和例程中识别出来的。一些公司要求开发人员自己进行单元测试,而有些公司则雇用专门的测试自动化资源。这些资源可以访问源代码,它们编写单元测试来破坏生产代码。由于单元测试的存在,每当代码编译时,所有单元测

热文推荐