【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...


#include "opencv2/core/utility.hpp" // 包含OpenCV核心工具库的头文件
#include "opencv2/imgproc.hpp" // 包含OpenCV图像处理的头文件
#include "opencv2/imgcodecs.hpp" // 包含OpenCV图像编码解码的头文件
#include "opencv2/highgui.hpp" // 包含OpenCV高层GUI(图形用户界面)的头文件#include <iostream> // 包含标准输入输出流的头文件// 使用命名空间cv和std,避免每次调用OpenCV和标准库函数时都需要前缀
using namespace cv;
using namespace std;// 全局变量,分别用于存储亮度和对比度的值
int _brightness = 100;
int _contrast = 100;Mat image; // 全局变量,用于存储图像矩阵/* 亮度/对比度调整回调函数 */
static void updateBrightnessContrast( int /*arg*/, void* )
{int histSize = 64; // 定义直方图的大小int brightness = _brightness - 100; // 计算新的亮度值int contrast = _contrast - 100; // 计算新的对比度值/** 使用Werner D. Streidt的算法来调整亮度和对比度* (参见http://visca.com/ffactory/archives/5-99/msg00021.html)*/double a, b;if( contrast > 0 ){double delta = 127.*contrast/100; // 计算对比度增量a = 255./(255. - delta*2); // 根据对比度增量计算系数ab = a*(brightness - delta); // 根据对比度增量和亮度计算系数b}else{double delta = -128.*contrast/100; // 计算对比度减量a = (256.-delta*2)/255.; // 根据对比度减量计算系数ab = a*brightness + delta; // 根据对比度减量和亮度计算系数b}Mat dst, hist; // 定义目标图像和直方图矩阵image.convertTo(dst, CV_8U, a, b); // 应用亮度和对比度的调整并转换图像格式imshow("image", dst); // 显示调整后的图像// 计算调整后图像的直方图calcHist(&dst, 1, 0, Mat(), hist, 1, &histSize, 0);Mat histImage = Mat::ones(200, 320, CV_8U)*255; // 创建直方图的图像// 对直方图进行归一化操作normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, CV_32F);histImage = Scalar::all(255); // 设置直方图图像的背景为白色int binW = cvRound((double)histImage.cols/histSize); // 计算每个bin的宽度// 绘制直方图for( int i = 0; i < histSize; i++ )rectangle( histImage, Point(i*binW, histImage.rows),Point((i+1)*binW, histImage.rows - cvRound(hist.at<float>(i))),Scalar::all(0), -1, 8, 0 );imshow("histogram", histImage); // 显示直方图
}// keys字符串定义了程序可以接受的命令行参数
const char* keys =
{"{help h||}{@image|baboon.jpg|input image file}"
};// 程序主函数
int main( int argc, const char** argv )
{CommandLineParser parser(argc, argv, keys); // 创建命令行参数解析器parser.about("\nThis program demonstrates the use of calcHist() -- histogram creation.\n");if (parser.has("help")) // 如果提供了帮助标志,则打印帮助信息{parser.printMessage();return 0;}string inputImage = parser.get<string>(0); // 获取输入的图像文件// 读取源图像,使用高级GUIimage = imread(samples::findFile(inputImage), IMREAD_GRAYSCALE); // 以灰度模式读取图像if(image.empty()) // 如果读取图像失败,则打印错误信息并退出{std::cerr << "Cannot read image file: " << inputImage << std::endl;return -1;}// 创建显示窗口namedWindow("image", 0);namedWindow("histogram", 0);// 创建轨迹条以调整亮度和对比度,并设置回调函数createTrackbar("brightness", "image", &_brightness, 200, updateBrightnessContrast);createTrackbar("contrast", "image", &_contrast, 200, updateBrightnessContrast);// 使用默认值更新亮度和对比度updateBrightnessContrast(0, 0);waitKey(); // 等待用户按键return 0; // 程序正常退出
} 这段代码是使用C++和OpenCV库编写的图像处理程序,其主要功能是调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。用户可以通过界面上的滑动条来动态地调整亮度和对比度参数从而观察到图像即时的变化效果。程序首先读取并显示一个灰度图像,然后响应用户的交互输入来更新图像显示和直方图。
image.convertTo(dst, CV_8U, a, b); 
calcHist(&dst, 1, 0, Mat(), hist, 1, &histSize, 0); 
normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, CV_32F); 
相关文章:
【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...
#include "opencv2/core/utility.hpp" // 包含OpenCV核心工具库的头文件 #include "opencv2/imgproc.hpp" // 包含OpenCV图像处理的头文件 #include "opencv2/imgcodecs.hpp" // 包含OpenCV图像编码解码的头文件 #include "opencv2/highgui…...
计算机网络---第三天
OSI参考模型与TCP/IP模型 参考模型产生背景: 背景:①兼容性较差,接口不统一 ②不利于排错与维护 ③设备成本高 参考模型概念: 概念:OSI参考模型定义了网络中设备所遵守的层次结构 参考模型优点: 优点…...
怎么防止文件被拷贝,复制别人拷贝电脑文件
怎么防止文件被拷贝,复制别人拷贝电,脑文件 防止文件被拷贝通常是为了保护敏感数据、知识产权或商业秘密不被未经授权的人员获取或传播。以下列出了一系列技术手段和策略,可以帮助您有效地防止文件被拷贝。 1. 终端管理软件: 如安企神、域智…...
流式密集视频字幕
流式密集视频字幕 摘要1 IntroductionRelated Work3 Streaming Dense Video Captioning Streaming Dense Video Captioning 摘要 对于一个密集视频字幕生成模型,预测在视频中时间上定位的字幕,理想情况下应该能够处理长的输入视频,预测丰富、…...
【教程】iOS Swift应用加固
🔒 保护您的iOS应用免受恶意攻击!在本篇博客中,我们将介绍如何使用HTTPCORE DES加密来加固您的应用程序,并优化其安全性。通过以下步骤,您可以确保您的应用在运行过程中不会遭受数据泄露和未授权访问的风险。 摘要 …...
新型基础设施建设(新基建)
新型基础设施建设(新基建)主要包括七个方面,即5G基站建设、特高压、城际高速铁路和城市轨道交通、新能源汽车充电桩、大数据中心、人工智能和工业互联网。 以下是新型基础设施的详细内容: 一、5G基站建设。5G网络的扩展和优化&a…...
蓝桥杯 第 9 场 小白入门赛 字符迁移
题目: 3.字符迁移【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路: 此题通过把小写字母映射成数字,进行差分即可。 AC代码: #include<iostream> #include<cstring> #include<algorithm>using namespace std;typed…...
泰迪智能科技人工智能应用工程师(中级)特训营
随着人工智能技术的迅猛发展和应用的不断拓展,掌握人工智能技术已成为现代职业发展和企业创新的关键。为此,人工智能技能提升特训营应运而生,以全面、系统的课程设置,帮助学员深入掌握相关的理论知识,实践操作技能。特…...
【数据结构】考研真题攻克与重点知识点剖析 - 第 6 篇:图
前言 本文基础知识部分来自于b站:分享笔记的好人儿的思维导图与王道考研课程,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术…...
java的基本数据类型
在Java编程语言中,基本数据类型是构成Java程序的基础元素,它们用于存储简单值。Java的基本数据类型可以分为两大类:原始类型(Primitive Types)和引用类型(Reference Types)。原始类型包括整型、…...
0104练习与思考题-算法基础-算法导论第三版
2.3-1 归并示意图 问题:使用图2-4作为模型,说明归并排序再数组 A ( 3 , 41 , 52 , 26 , 38 , 57 , 9 , 49 ) A(3,41,52,26,38,57,9,49) A(3,41,52,26,38,57,9,49)上的操作。图示: tips::有不少在线算法可视化工具(软…...
烤羊肉串引来的思考--命令模式
1.1 吃羊肉串! 烧烤摊旁边等着拿肉串的人七嘴八舌地叫开了。场面有些混乱,由于人实在太多,烤羊肉串的老板已经分不清谁是谁,造成分发错误,收钱错误,烤肉质量不过关等。 外面打游击烤羊肉串和这种开门店做烤…...
Python 描述符
文章目录 类型:数据描述符:方法描述符:描述符的要包括以下几点:方法描述符实现缓存 描述符(Descriptor)是 Python 中一个非常强大的特性,它允许我们自定义属性的访问行为。使用描述符,我们可以创建一些特殊的属性,在访问这些属性时执行自定义…...
Go语言创建HTTP服务器
Web服务器可提供网页、Web服务和文件,而Go语言为创建Web服务器提供了强大的支持。 1.通过Hello World Web 服务器宣告您的存在 标准库中的net/http包提供了多种创建HTTP服务器的方法,它还提供了一个基本的路由器。 package mainimport ("net/http" )func helloWo…...
【LeetCode热题100】【栈】柱状图中最大的矩形
题目链接:84. 柱状图中最大的矩形 - 力扣(LeetCode) 要找最大的矩形就是要找以每根柱子为高度往两边延申的边界,要作为柱子的边界就必须高度不能低于该柱子,否则矩形无法同高,也就是需要找出以每根柱子为高…...
谷歌浏览器插件开发速成指南:弹窗
诸神缄默不语-个人CSDN博文目录 本文介绍谷歌浏览器插件开发的入门教程,阅读完本文后应该就能开发一个简单的“hello world”插件,效果是出现写有“Hello Extensions”的弹窗。 作为系列文章的第一篇,本文还希望读者阅读后能够简要了解在此基…...
Lakehouse 大数据概念
“Lakehouse” 是一个相对新的概念,是大数据理论中的一个重要发展方向。它试图结合传统的数据湖(Data Lake)和数据仓库(Data Warehouse)的优点,以创造一种更为灵活和强大的数据管理体系。 在传统的大数据架构中,数据湖用于存储原始、未加工的数据,而数据仓库则用于存储…...
MySQL学习笔记(二)
1、把查询结果中去除重复记录 2、连接查询 从一张表中单独查询,称为单表查询。emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字,这种跨表查询,多张表联合起来查询数据,被称为连…...
Verilog语法——按位取反“~“和位宽扩展的优先级
前言 先说结论,如下图所示,在Verilog中“~ ”按位取反的优先级是最高的,但是在等式计算时,有时候会遇到位宽扩展,此时需要注意的是位宽扩展的优先级高于“~”。 验证 仿真代码,下面代码验证的是“~”按位取…...
Navicat工具使用
Navicat的本质: 在创立连接时提前拥有了数据库用户名和密码 双击数据库时,相当于建立了一个链接关系 点击运行时,远程执行命令,就像在xshell上操作Linux服务器一样,将图像化操作转换成SQL语句去后台执行 一、打开Navi…...
Linux文本管道效率稳定性治理方法
Linux文本管道效率稳定性治理方法这是一篇面向中级 Linux 使用者的技术文章,主题聚焦在文本管道效率,重点讨论管道组合、文本过滤和执行开销。在真实生产环境中,文本管道效率相关问题往往不会以单一错误形式出现,而是混杂在日志、…...
2026年八大上门服务预约小程序:解锁高效生活新体验
本文围绕上门服务预约小程序展开系统性梳理,聚焦2026年市场上主流的八家服务商,包括好赞科技、厦门亿点通科技、福州启帆数字科技等。内容覆盖核心功能解析、场景适配性、用户体验及服务效率等关键维度,旨在帮助用户理解不同平台的差异化优势…...
DIY便携UV美甲灯:从电路设计到3D打印的完整制作指南
1. 项目概述:为什么选择DIY一个便携UV美甲灯?如果你和我一样,是个喜欢自己动手做美甲,同时又对电子制作和3D打印有点“手痒”的爱好者,那你肯定对市面上那些笨重、必须插电的UV美甲灯感到过不满。它们要么像个小型烤箱…...
3分钟快速上手:Windows实时语音转文字工具TMSpeech完整使用指南
3分钟快速上手:Windows实时语音转文字工具TMSpeech完整使用指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱吗?是否曾因错过重要信息而懊恼?今天我要向…...
从失败案例看全球化内容服务的合规架构与自动化风控实践
1. 项目概述与背景解析最近在和一些做全球化内容分发或者跨国协作项目的朋友交流时,大家普遍会提到一个词:“内容合规性审查”。这听起来像是一个法务或者运营的术语,但对我们这些搞技术、做开发的人来说,它背后其实是一整套复杂的…...
Taotoken账单追溯功能如何帮助厘清项目间的AI资源消耗
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken账单追溯功能如何帮助厘清项目间的AI资源消耗 当团队同时推进多个AI实验项目时,一个常见的困扰是:…...
创业公司如何利用taotoken的token plan套餐控制ai研发成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业公司如何利用Taotoken的Token Plan套餐控制AI研发成本 对于早期科技创业公司而言,产品创新与成本控制是两条必须并…...
ENVI实战:从直方图拉伸到图像变换,解锁遥感影像增强核心技巧
1. 遥感影像增强入门:为什么需要处理? 第一次接触遥感影像时,很多人会疑惑:为什么卫星拍回来的原始图像总是灰蒙蒙的?这就像用手机在雾天拍照,所有景物都像蒙了一层纱。我在处理长江流域水体监测项目时就遇…...
利用Taotoken的Token Plan套餐为团队项目节省大模型调用成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken的Token Plan套餐为团队项目节省大模型调用成本 对于中小型技术团队而言,在项目开发中引入大模型能力已成…...
从Python到Shell:给AI/开发者的极简跨语言编程指南(附避坑对比)
从Python到Shell:给AI/开发者的极简跨语言编程指南(附避坑对比) 当Python开发者第一次接触Shell脚本时,往往会陷入两种极端:要么低估了Shell的能力,认为它只是简单的命令拼接;要么高估了它的复…...
