OpenCV(图像对比度)

news/2024/9/22 22:19:20/文章来源:https://www.cnblogs.com/keye/p/18426015

目录
  • 1. 图像对比度
  • 2. 对比度调整的原理
  • 3. 示例
  • 4. 调整对比度的效果



1. 图像对比度

图像对比度是指图像中亮部和暗部之间的差异程度。对比度越高,亮区更亮,暗区更暗;对比度低时,亮区和暗区的差异不明显,图像显得平淡。



2. 对比度调整的原理

图像对比度可以通过线性变换实现,公式如下:

\[I_{out} = \alpha \cdot I_{in} + \beta \]

  • \(I_{in}\) 是输入图像的像素值。
  • \(I_{out}\) 是输出图像的像素值。
  • \(\alpha\) 是对比度调整因子,通常大于1会增强对比度,介于0到1之间会降低对比度。
  • \(\beta\) 是亮度调整因子,它的作用是整体调整图像亮度。


3. 示例

对RGB图像进行对比度调整。

#include <opencv2/opencv.hpp>
#include <iostream>void adjustContrast(const cv::Mat& inputImage, cv::Mat& outputImage, double alpha, double beta) {// 创建输出图像,初始化为和输入图像相同大小和类型outputImage = cv::Mat::zeros(inputImage.size(), inputImage.type());// 遍历每个像素点,应用对比度和亮度调整for (int y = 0; y < inputImage.rows; y++) {for (int x = 0; x < inputImage.cols; x++) {for (int c = 0; c < inputImage.channels(); c++) {// 应用公式 I_out = alpha * I_in + betaoutputImage.at<cv::Vec3b>(y, x)[c] = cv::saturate_cast<uchar>(alpha * inputImage.at<cv::Vec3b>(y, x)[c] + beta);}}}
}int main() {// 读取图像cv::Mat image = cv::imread("input_image.jpg");if (image.empty()) {std::cerr << "无法读取图像!" << std::endl;return -1;}// 调整参数:alpha 调整对比度,beta 调整亮度double alpha = 1.5; // 对比度因子double beta = 20;   // 亮度偏移量cv::Mat outputImage;adjustContrast(image, outputImage, alpha, beta);// 显示原始图像和调整后的图像cv::imshow("Original Image", image);cv::imshow("Contrast Adjusted Image", outputImage);// 保存输出图像cv::imwrite("output_image.jpg", outputImage);// 等待用户按键cv::waitKey(0);return 0;
}

代码说明:

  1. adjustContrast函数: 该函数用于调整图像的对比度和亮度。遍历每个像素点,并对每个通道(RGB)应用公式:

    \[I_{out} = \alpha \cdot I_{in} + \beta \]

    其中,cv::saturate_cast<uchar>确保像素值在0到255之间。

  2. 参数alphabeta

    • alpha(对比度因子):大于1会增强对比度,0到1之间会降低对比度。
    • beta(亮度偏移量):正值增加整体亮度,负值降低整体亮度。
  3. cv::Mat::zeros(): 用于创建与输入图像相同尺寸和类型的空白图像。



4. 调整对比度的效果

  • 如果你设置 alpha = 1.5,图像对比度会变得更高,亮的部分变得更亮,暗的部分变得更暗。
  • 如果你设置 alpha = 0.5,图像的对比度会降低,亮暗之间的差异会减少。
  • beta 的调整则控制整体亮度的升高或降低。


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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

execve

目录glibc glibc execve() 执行由 pathname 指定的程序。这会导致当前正在被调用进程运行的程序被一个新程序替换,且该新程序会重新初始化栈、堆,以及(已初始化和未初始化的)数据段。

freeRTOS源码解析4--tasks.c 5

4.2.13 继续任务--vTaskResume 接口:void vTaskResume( TaskHandle_t xTaskToResume )形参1:xTaskToResume ,想要继续的任务handle; 首先是vTaskResume调用的一个内部函数:static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ),用于检查任务是否是挂起…

MySQL 必知概念

Delete、Drop 和 Truncatedelete、truncate 仅仅删除表里面的数据,drop会把表的结构也删除 delete 是 DML 语句,操作完成后,可以回滚,truncate 和 drop 是 DDL 语句,删除之后立即生效,不能回滚 执行效率:drop > truncate > deleteMyISAM 与 InnoDBInnoDB 支持事务…

视野修炼-技术周刊第102期 | js 编译运行C

① Bun 现在允许直接在js中直接编译运行 C ! ② caniuse-cli ③ SSL证书管理工具 ④ 好的重构与坏的重构 ⑤ sisi - 命令行图片检索工具 ⑥ cvbee.ai - AI 简历生成欢迎来到第 102 期的【视野修炼 - 技术周刊】,下面是本期的精选内容简介 🔥强烈推荐Bun 现在允许直接在js中…

【vulhub】Discuz-命令执行 wooyun-2010-080723

【vulhub】Discuz-命令执行 wooyun-2010-080723 ​docker-compose up-d​启动! ​​ wooyun-2010-080723 命令执行 0x01 搭建环境 访问192.168.132.138:8080/install​,安装数据库。数据库服务器填写db(必须db,不然安装失败),数据库名为discuz,数据库账号密码均为root,…

华科python与人工智能实践(公选)教程

python基础 软件下载 1.python下载安装 点击此链接进入官网windows下载地址点击箭头处链接下载最新版本,进入页面后下拉根据你的机器下载对应版本,一般人使用的是X86架构windos系统,下载箭头所指即可 若是不知道CPU架构,可见查看cpu架构,x86还是arm 下载后根据指引进行安装…

2376.统计特殊整数

如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个 正 整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。 示例 1: 输入:n = 20 输出:19 解释:1 到 20 之间所有整数除了 11 以外都是特殊整数。所以总共有 19 个特殊整数。 示例 2: 输入:n = …

数业智能心大陆:职场倦怠的新解法

什么是职业倦怠? 在职场中,职业倦怠的表现形式丰富多样。从数业智能心大陆 AI 心理咨询平台的数据来看,职业倦怠呈现出多种状态。教师可能对教学不再满怀热情,精心备课也成为过去式;情绪上容易烦躁、易怒,在工作压力之下,常常因为一些小事就被激怒。比如在项目团队中,成…

2024“华为杯”数模研赛E数据提取代码

2024年数学建模研究生赛E题从视频中提取数据的代码。主要包括三个部分:车流量计算、各车道车流量计算和平均速度计算。主要讲述了代码的使用方法,包括需要修改的参数和文件路径,以及一些特殊情况的处理方法。同时还提供了参数估计和绘图的相关代码,以及如何根据不同视频视角…

用Eide下配合Cubemx配置stm32环境

PS:本篇为个人学习的记录,一是方便回忆,二是相同时方便给像我一样的小白一点建议。本文默认已安装好STM32Cubemx和VSCode,以及VsCode下的Eide Cubemx部分选择好需要使用的对应单片机创建工程。在Project Manager选项下 选择Toolchain/IDE下的makefile方式来创建工程。什么是…

USB2.0设备的休眠挂起及远程唤醒

USB可见设备状态,分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统和主机可见的状态,其他状态属于USB设备内部而不可见。其中有关电源的,大致可分下面三类:连接状态(Attached):设备连…

CSP-S 2024 提高组初赛解析(更新至单项选择)

单项选择 1在 Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令? A pwd B cd C ls D echopwd : print working directory cd : 跳转到指定目录 ls : 列出当前目录的所有子文件和子文件夹 echo : 输出指定内容 2假设一个长度为n的整数数组中每个元索值互不相同…