精选文章 OpenCV基础入门(六)

OpenCV基础入门(六)

作者:aaa1163548340 时间: 2020-07-27 10:45:06
aaa1163548340 2020-07-27 10:45:06

第六节、调整图像亮度与对比度

图像变换可以看作如下:

 - 像素变换 – 点操作

    g(i,j)=af(i,j)+β其中a>0,β是增益变量。

 - 邻域操作 – 区域

调整图像亮度和对比度属于像素变换-点操作

重要的API

  1. Mat new_image = Mat::zeros( image.size(), image.type() );  创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0
  2. saturate_cast(value)确保值大小范围为0~255之间
  3. Mat.at(y,x)[index]=value 给每个像素点每个通道赋值

代码演示:

#include 
#include 
using namespace cv;
int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("4.jpg");//读取图片数据
	//判断数据是否为空
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	char input_win[] = "input image";
	//cvtColor(src, src, CV_BGR2GRAY);//转换图片颜色彩色转黑白
	namedWindow(input_win, CV_WINDOW_AUTOSIZE);//显示窗口(窗口名 + 根据图片自动改变窗口大小)
	imshow(input_win, src);
	// contrast and brigthtness changes 
	int height = src.rows;
	int width = src.cols;
	dst = Mat::zeros(src.size(), src.type());相当于创建一张黑色的图,每个像素的每个通道都为0,Scalar(0,0,0);
	float alpha = 1.2;//对比度
	float beta = 80;//亮度
	Mat m1;
	src.convertTo(m1, CV_32F);//将数据装换为3f(f--float浮点型)数据,不然获取不了图片的数据只能用Vec3b(b--int整型)
	for (int row = 0; row < height; row++) {
		for (int col = 0; col < width; col++) {
			if (src.channels() == 3) {
				float b = m1.at(row, col)[0];// blue
				float g = m1.at(row, col)[1]; // green
				float r = m1.at(row, col)[2]; // red
				// output
				dst.at(row, col)[0] = saturate_cast(b*alpha + beta);
				dst.at(row, col)[1] = saturate_cast(g*alpha + beta);
				dst.at(row, col)[2] = saturate_cast(r*alpha + beta);
			}
			else if (src.channels() == 1) {
				float v = src.at(row, col);
				dst.at(row, col) = saturate_cast(v*alpha + beta);
			}
		}
	}
	char output_title[] = "contrast and brightness change demo";//显示改变后的窗口
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);
	imshow(output_title, dst);
	waitKey(0);
	return 0;
}

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:Python新手如何进行闭包时绑定变量操作

下一篇:HDU 1601(Galactic Import)

您可能感兴趣

  • 美团数据库运维自动化系统构建之路

    本文整理自美团点评技术沙龙第10期:数据库技术架构与实践。 美团点评技术沙龙由美团点评技术团队主办,每月一期。每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。 目前沙龙会分别在北京、上海和厦门等地举行,要参加下一次最新沙龙活动?赶快关注微信公众号“美团点评技术团队”。 本次沙龙主要围绕数据库相关的主题,内容包括美团数据库自动化运维系统构建、点评侧My...

  • 零基础入门天池NLP赛事之——新闻文本分类(6)

    基于深度学习的文本分类 一、学习目标: 了解Transformer的原理和基于预训练语言模型(Bert)的词表示 学会Bert的使用,具体包括pretrain和finetune 二、文本表示方法Part4: Transformer原理 Transformer是在"Attention is All You Need"中提出的,模型的编码部分是一组编码器的堆叠(论文中依次堆叠六个编码器),模型的...

  • python学习001

    前言: 1、运维/网络为什么要学习编程? (1)运维/网络中所有已学的命令其实都是已经编制好的程序,创造命令就是编写程序; (2)在云计算领域中,繁琐的命令配置已经不能满足日常需求,深入发展是需要贴近业务/研发的,因此就要能够创造命令/编写程序/开发; (3)网络安全领域中,可以深入理解渗透、攻防等细节,Kali-Linux ,SDN(命令对应网络)夯实技术; (4)对于校招而言,大型互联网...

  • 对云桌面、桌面云、私有云的一些看法

    最近整理了一下自2017年以来自己对私有云服务平台构建的一些认识,并以刚刚为某后勤保障部队单位提供的小规模私有云服务平台为例阐述。 私有云平台、云计算服务与虚拟化: 我个人认为这三个名称分别指涉了三个不同的事物: 私有云平台:在实践中,私有云平台时包含了服务端软硬件集成和客户端软硬件集成的一整套特定业务需求场景的、已经处于落地实施阶段的解决方案项目。 比如某后勤保障部队为简化征兵流程、节省相...

  • 武田宣布2020财年第一季度业绩;确认管理层指引,并提高全年列报运营利润和列报净利润

    日本大阪--(美国商业资讯)--武田药品工业株式会社(Takeda Pharmaceutical Company Limited, TOKYO:4502/NYSE:TAK)(简称“武田”)今天宣布了2020财年第一季度(截至2020年6月30日)的财务业绩。基于第一季度的业绩,该公司确认了管理层指引,并提高了全年的列报运营利润和列报净利润。该公司还宣布了其研发产品线的最新消息,强调了其研发动...

  • 云表场景支撑让设备从资产管理进化到能力经营

    在云表服务的许多用户中,有一个比较普遍的现象就是,在传统软件无法充分表现的管理或者服务的颗粒度,大家都希望通过云表来实现。 比如设备管理,企业通常列为固定资产,按照资产管理的方式进行管理。但是对于那些通过流转才能实现价值的设备,固定资产的管理方式远远不足够。设备管理就是最大程度地让设备为客户提供更多频次的服务,从而创造更多价值。 某公司是中国气象局为电视等传媒提供气象服务的唯一对外窗口,也是...

  • 《深入浅出玩转FPGA》笔记

    关于这本书,算是囫囵吞枣地读完了。网上很多人推荐这本书,评价很不错。以我的观点来看,确实是本不错的关于FPGA方面的书,作者确实经验丰富,书中有很多值得学习的东西,但是可能不是很适合初学者看,比较适合有一定项目经验的人读。因为这本书本身就是将作者许多自己的亲身经历总结出来的经验编纂出来的,可能作者也是看烦了市面上一众读物都秉持着介绍某类知识一定要事无巨细地从头说到尾的风格,所以作者对基础的介...

  • 计算机必备专用英语词汇

    非常好的单词整理,转载一下当作笔记 1.单词说明:   command n. 命令,指令 [kə'mɑ:nd]   单词拼写 名词 单词含义 音标(发音)   提示:着重记忆单词对应的意思,有能力最好词性也记忆。 2.词性说明: n v vi vt conj prep pron adj adv 名词 动词 非及物动词 及物动词 连词 介词 代词 形容词 副词 3.单词列表: 1.file,n...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。