【OpenCV】图像算术操作

1 前言

        介绍图像算术操作,以及其可以实现的图像亮度、对比度调整效果。相关API:

  • add()

  • subtract()

  • multiply()

  • divide()

  • addWeighted()

2 代码及内容

#include "iostream"
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int argc, char *argv)
{
	//【图像加减乘除操作】
	/*	
	//首先读入两幅图像,并显示出来。
	Mat src1 = imread("C:/Users/Administrator/Desktop/Zooey.png");
	Mat src2 = imread("C:/Users/Administrator/Desktop/5.png");
	if (src1.empty() || src2.empty())
	{
		cout << "could not find image file" << endl;
		return -1;
	}
	imshow("input1", src1);
	imshow("input2", src2);

	//算术操作
	Mat dst1;
	add(src1, src2, dst1);		//加
	imshow("add-demo", dst1);

	Mat dst2;
	subtract(src1, src2, dst2);	//减,注意参数顺序,src1-src2,转到定义有详细介绍
	imshow("subtract-demo", dst2);

	Mat dst3;
	multiply(src1, src2, dst3);	//乘
	imshow("multiply-demo", dst3);

	Mat dst4;
	divide(src1, src2, dst4);	//除,注意参数顺序,src1/src2,转到定义有详细介绍
	imshow("divide-demo", dst4);
	*/

	//【亮度、对比度调整】
	//图像亮度调整(实际上就是像素的加减操作,所有像素值加减相同的值)
	Mat src = imread("C:/Users/Administrator/Desktop/Zooey.png");
	imshow("input", src);
	Mat black = Mat::zeros(src.size(), src.type());		//创建一个大小、类型都和原图一样的黑色图像(像素值全为0)
	black = Scalar(40, 40, 40);				//设置每个像素的值,为后面的算术操作做准备
	Mat dst1;							//算术操作后接收结果的Mat对象
	subtract(src, black, dst1);			//减法操作
	imshow("亮度调整", dst1);

	//图像对比度调整(实际上就是像素的乘法操作,所有像素值乘以相同的值,它们之间的差值变大,对比度就变大了),下面的API(方法、函数)既可以调整比对度也可以调整亮度。
	Mat dst2;
	addWeighted(src, 1.2, black, 0.5, 0.0, dst2);	//提供的API。dst = src1*alpha + src2*beta + gamma;活用转到定义。alpha第二参数,beta第四参数,gamma第五参数。
	imshow("对比度与亮度调整", dst2);

	waitKey(0);
	destroyAllWindows();
	return 0;
}

        代码分为两部分,一部分是基础算术操作,一部分是对比度,亮度调整。运行时分别注释。

        代码中都注释的很清楚,也就是几个API的使用,在使用官方API时,要活用转到定义,官方都会有自己的注释说明。

        要明确亮度和对比度调整的原理是什么:

  • 亮度:所有像素值同加减相同的值,实现整体黑白度的变化。

  • 对比度:所有像素值同乘相同的值,这样像素值间的差距会变大(2和4,差2,同乘2,变4和8,差4),实现整体色彩对比度变化。

        Note:对RGB图像来说,像素值越大,亮度越高。

  • 黑色(0,0,0)

  • 白色(255,255,255)

演示:

代码后半部分的亮度、对比度调整。

 3 结束语

        没啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/511170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodeJs 实现视频的转换(超详细教程)

前段时间拿到一个视频是4k的&#xff0c;没法播放&#xff0c;于是通过 node.js 和 ffmpeg 实现了视频的转换。在win10 系统下实现。 所需工具 node 16.19 直接安装 ffmpeg-5.1.1-essentials_build 解压后重名 ffmpeg 放到C盘 然后配置下环境变量 Git-2.42.0.2-64-bit 直接…

前端:注册页面(后端php实现)

效果 代码 Regist.php <!-- 内部员工注册 --> <?php require_once get_db_conn.php; $conn db_connect();?> <?php //设置变量的默认值 if (!isset($_POST[UserID])) {$_POST[UserID] ; } if (!isset($_POST[Password])) {$_POST[Password] ; } if (!i…

Android 关于apk反编译d2j-dex2jar classes.dex失败的几种方法

目录 确认路径正确直接定位到指定目录确定目录正确&#xff0c;按如下路径修改下面是未找到相关文件正确操作 确认路径正确 &#xff0c;即d2j-dex2jar和classes.dex是否都在一个文件夹里&#xff08;大部分的情况都是路径不正确&#xff09; 直接定位到指定目录 路径正确的…

Python框架下的qt设计之JSON格式化转换小程序

JSON转换小程序 代码展示&#xff1a; 主程序代码&#xff1a; from PyQt6.QtWidgets import (QApplication, QDialog, QMessageBox )import sys import jsonclass MyJsonFormatter(jsonui.Ui_jsonFormatter,QDialog): # jsonui是我qt界面py文件名def __init__(self):super()…

Github 2024-04-02Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次关注人数:241693 人贡献…

提升常州小程序软件开发的搜索排名:关键步骤解析

在移动互联网的浪潮中&#xff0c;小程序作为连接用户与服务的桥梁&#xff0c;其重要性日益凸显。对于常州的小程序软件开发企业来说&#xff0c;如何让自己的产品在浩如烟海的互联网信息中脱颖而出&#xff0c;提升搜索排名&#xff0c;成为了亟待解决的问题。本文将为您解析…

【Qt 学习笔记】如何在Qt中打印日志 | qDebug的使用 | Assistant的使用

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 如何在Qt中打印日志 | qDebug的使用 文章编号&#xff1a;Qt 学习笔记…

云计算对象存储服务

对象存储服务&#xff08;OSS&#xff09;中的存储桶(Bucket)叫做‘OBS桶 存储桶&#xff08;Bucket&#xff09;&#xff1a;存储桶式对象存储服务中用于存储对象的基本容器&#xff0c;类似于文件系统中的文件夹。每个存储桶具有唯一的名称&#xff0c;并且可以在桶中存储任…

Databend 开源周报第 138 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持多表插入 …

mac 切换 jdk

查看 mac 上都有哪些版本 /usr/libexec/java_home -V看准版本切换 按前缀切换 比如 export JAVA_HOME/usr/libexec/java_home -v 1.8这样会随机一个 1.8 的 如果想再确定一个比如 openjdk export JAVA_HOME/usr/libexec/java_home -v 1.8.0_292这个方式是临时的&#xff0c…

Spark-Scala语言实战(10)

在之前的文章中&#xff0c;我们学习了如何在spark中使用RDD的filter,distinct,intersection三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-…

【嵌入式硬件】光耦

1.光耦作用 光耦一般用于信号的隔离。当两个电路的电源参考点不相关时,使用光耦可以保证在两边不共地的情况下,完成信号的传输。 2.光耦原理 光耦的原理图如下所示,其内部可以看做一个特殊的“三极管”; 一般的三极管是通过基极B和发射极E间的电流,去控制集电极C和发射极…

【2023】kafka原生以及配合springboot的使用(Kafka-3)

&#x1f4bb;目录 前言 一、依赖二、原生使用kafka1、发送消息1.1、生产者同步发送消息1.2、生产者异步发送消息1.3、常用配置&#xff1a; 2、接收消息2.1、关于消费者的自动提交和手动提交2.2、长轮训poll消息2.3、消费者的健康状态检查2.4、指定分区和偏移量&#xff0c;时…

Java基础知识总结(第八篇):集合:Collection(List、Set)、Map、Collections 工具类

声明: 1. 本文根据韩顺平老师教学视频自行整理&#xff0c;以便记忆 2. 若有错误不当之处, 请指出 系列文章目录 Java基础知识总结&#xff08;第一篇&#xff09;&#xff1a;基础语法 Java基础知识总结&#xff08;第二篇&#xff09;&#x…

obs直播推流 + ffmpeg参数

OBS 启动参数设为 --startstreaming &#xff0c; 可以让它启动后自动开始直播 对应ffmpeg参数&#xff1a; echo off :loop ffmpeg -re -i a.mp4 -r 24 -c:v libx264 -preset ultrafast -profile:v baseline -g 24 -keyint_min 24 -x264-params nal-hrdcbr -b:v 2500k -minr…

用于HUD平视显示器的控制芯片:S2D13V40

一款利用汽车抬头显示技术用于HUD平视显示器的控制芯片:S2D13V40。HUD的全称是Head Up Display&#xff0c;即平视显示器&#xff0c;以前应用于军用飞机上&#xff0c;旨在降低飞行员需要低头查看仪表的频率。起初&#xff0c;HUD通过光学原理&#xff0c;将驾驶相关的信息投射…

浅谈对化工厂内35kV及以下变电所的综合自动化

摘要&#xff1a;35kV变电站综合自动化系统的设计&#xff0c;主要遵循电网调度自动化的整体需要&#xff0c;其配置、功能要满足电网安全、经济、信息分层传输、资源共享等要求。本文以35kV及以下变电站自动化系统的设计为指导思想&#xff0c;对设计工作进行相关讨论。 安科…

Flutter 开发学习笔记(3):第三方UI库的引入

文章目录 前言初始化程序Icon导入如何导入 Toast消息提示框引入简单封装简单使用 Charts图表导入新建pages文件夹存放page简单代码实现效果 总结 前言 Flutter已经发布了有10年了&#xff0c;生态也算比较完善了。用于安卓程序开发应该是非常的方便。我们这里就接入一些简单的…

人工智能+的广泛应用,已渗透到生活的方方面面

引言 随着科技的不断进步和人工智能技术的快速发展&#xff0c;我们正处于一个人工智能时代。人工智能不仅仅是一种技术&#xff0c;更是一种革命性的变革力量&#xff0c;它正在以前所未有的方式改变着我们的生活和工作方式。 人工智能&#xff08;AI&#xff09;指的是人工…

HBase详解(1)

HBase 简介 概述 HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database)&#xff0c;因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL)&#xff0c;而是提供了一套单独的命令和API操…