c++视觉---使用轨迹条设置图片的对比度,亮度

轨迹条:cv::createTrackbar

cv::createTrackbar 是OpenCV库中的一个函数,用于创建一个图形用户界面 (GUI) 中的滑动条控件,允许用户在应用程序运行时调整特定参数的值。这个函数的调用方式如下:

int cv::createTrackbar(const std::string& trackbarName, const std::string& windowName, int* value, int count, cv::TrackbarCallback onChange = 0, void* userdata = 0);

参数解释:

  • trackbarName:滑动条的名称,显示在滑动条旁边的标签上。
  • windowName:包含滑动条的窗口的名称。
  • value:一个整数指针,用于存储滑动条的当前值。当用户移动滑动条时,这个值会被更新。
  • count:滑动条的最大值(最小值默认为0)。这决定了滑动条的取值范围。
  • onChange:一个可选的回调函数,在用户移动滑动条时会被调用。它允许您在滑动条值变化时执行自定义操作。
  • userdata:一个可选的用户数据指针,传递给回调函数,允许您在回调函数中使用自定义数据。

通过创建滑动条,用户可以在运行时交互地调整参数的值,这对于图像处理和计算机视觉应用程序非常有用,允许用户实时观察效果并进行微调。

使用轨迹条设置对比度

#include <opencv2/opencv.hpp>// 回调函数,用于处理轨迹条值的变化
void onTrackbar(int value, void* userdata) {cv::Mat* imagePtr = static_cast<cv::Mat*>(userdata);// 设置对比度增强参数double alpha = static_cast<double>(value) / 100.0;// 增强图像对比度cv::Mat enhancedImage = (*imagePtr) * alpha;// 显示增强后的图像cv::imshow("Enhanced Image", enhancedImage);
}int main() {// 读取输入图像cv::Mat inputImage = cv::imread("1.jpg");// 检查图像是否成功加载if (inputImage.empty()) {std::cout << "无法加载输入图像" << std::endl;return -1;}// 创建窗口cv::namedWindow("Enhanced Image");// 创建轨迹条int initialContrast = 100; // 初始对比度值cv::createTrackbar("Contrast", "Enhanced Image", &initialContrast, 300, onTrackbar, &inputImage);// 显示初始图像cv::imshow("Enhanced Image", inputImage);// 等待按键事件cv::waitKey(0);return 0;
}

在这里插入图片描述

使用:image. at(y,x)[c]语法来设置对比度和亮度

image.at<Vec3b>(y, x)[c] 是一种在OpenCV中用于访问图像像素值的常见方式。让我解释这个表达式的各个部分:

  • image:这是一个OpenCV的cv::Mat对象,表示图像。cv::Mat 是OpenCV中用于表示图像和矩阵的数据结构。

  • at<Vec3b>(y, x):这是使用at方法来访问图像的像素值的一种方式。at方法接受图像中的行和列索引作为参数,并返回该位置的像素值。

  • <Vec3b>:这是模板参数,指定了图像中每个像素的数据类型。在这种情况下,Vec3b 表示每个像素是一个3通道的彩色像素,其中每个通道都是8位无符号整数。

  • (y, x):这是要访问的像素的行和列坐标。y 表示行号,x 表示列号。

  • [c]:这是通道索引,表示要访问的通道。在3通道彩色图像中,通常有三个通道,分别对应于红色、绿色和蓝色。通过 [c],您可以选择要访问的通道,其中 c 的值通常为0(红色通道)、1(绿色通道)或2(蓝色通道)。

因此,image.at<Vec3b>(y, x)[c] 允许您访问图像在 (x, y) 处指定通道 c 上的像素值。这对于图像处理和像素级操作非常有用。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace std;
using namespace cv;
#include <iostream>
#include <fstream>
using namespace cv; //包含cv命名空间
#include <opencv2/core/core.hpp>// 描述:全局函数声明
//
static void on_ContrastAndBright(int, void*);
static void ShowHelpText();
//- -------【全局变量声明部分】-------------------------
// 描述: 全局变量声明
//、
int g_nContrastValue; //对比度值
int g_nBrightValue; //亮度值
Mat g_srcImage, g_dstImage;
// 【main()函数】--------------------------
// 描述: 控制台应用程序的入口函数, 我们的程序从这里开始
//
int main()
{//【1】读取输入图像g_srcImage = imread("1.jpg");if (!g_srcImage.data) { printf("读取图片错误,请确定目录下是否有imread 函数指定图片存在~!"); return false; }g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type());// 【2】设定对比度和亮度的初值g_nContrastValue = 80;g_nBrightValue = 80;//【3】创建效果图窗口namedWindow("【效果图窗口】", 1);//【4】创建轨迹条createTrackbar("对比度: ", "【效果图窗口】", &g_nContrastValue, 300, on_ContrastAndBright);createTrackbar("亮度: ", "【效果图窗口】", &g_nBrightValue, 200, on_ContrastAndBright);//【5】进行回调函数初始化on_ContrastAndBright(g_nContrastValue, 0);on_ContrastAndBright(g_nBrightValue, 0);//【6】按下"q"键时, 程序退出while (char(waitKey(1)) != 'q') {}return 0;
}//-------------------【on_ContrastAndBright()函数】-
// 描述: 改变图像对比度和亮度值的回调函数
//------------
static void on_ContrastAndBright(int, void*)
{// 创建窗口namedWindow("【原始图窗口】", 1);//三个 for循环,执行运算g_dstImage(i,j) = a*g_srcImage(i,j) + bfor( int y = 0; y< g_srcImage. rows; y++){for (int x = 0; x < g_srcImage.cols; x++){for (int c = 0; c < 3; c++){g_dstImage.at<Vec3b>(y, x)[c] =saturate_cast<uchar>((g_nContrastValue * 0.01) * (g_srcImage.at<Vec3b>(y, x)[c]) + g_nBrightValue);}}}//显示图像imshow("【原始图窗口】", g_srcImage);imshow("【效果图窗口】", g_dstImage);
}

在这里插入图片描述

调用本地相机来设置对比度

#include <opencv2/opencv.hpp>// 全局变量用于存储对比度值
int contrast = 100;// 回调函数,用于处理轨迹条值的变化
void onTrackbar(int value, void* userdata) {// 将轨迹条值存储到全局变量中contrast = value;
}int main() {// 打开默认相机(通常是第一个相机)cv::VideoCapture cap(0);// 检查相机是否成功打开if (!cap.isOpened()) {std::cout << "无法打开相机" << std::endl;return -1;}// 创建窗口cv::namedWindow("Camera Feed");// 创建轨迹条cv::createTrackbar("对比度", "Camera Feed", &contrast, 200, onTrackbar);while (true) {cv::Mat frame;cap >> frame; // 从相机获取帧// 增强图像对比度cv::Mat enhancedFrame = frame * (contrast / 100.0);// 显示增强后的图像cv::imshow("Camera Feed", enhancedFrame);// 检查是否按下ESC键,如果是则退出循环if (cv::waitKey(1) == 27) {break;}}// 关闭相机cap.release();// 销毁窗口cv::destroyAllWindows();return 0;
}

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

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

相关文章

Mac navicat连接mysql出现1045 - Access denied for user ‘root‘

Mac navicat连接mysql出现1045 - Access denied for user ‘root’ 前提&#xff1a;如果你的mac每次开navicat都连接不上&#xff0c;推荐试试我这个方法 1.打开设置–>找到左下角最下面的MySQL–>点击Stop MySQL Server 2.开启一个终端&#xff0c;依次输入以下命令&a…

C++:关于模拟实现vector和list中迭代器模块的理解

文章目录 list和vector的迭代器对比list的实现过程完整代码 本篇是关于vector和list的模拟实现中&#xff0c;关于迭代器模块的更进一步理解&#xff0c;以及在前文的基础上增加对于反向迭代器的实现和库函数的对比等 本篇是写于前面模拟实现的一段时间后&#xff0c;重新回头…

【论文笔记】A theory of learning from different domains

防盗 https://www.cnblogs.com/setdong/p/17756127.html domain adaptation 领域理论方向的重要论文. 这篇笔记主要是推导文章中的定理, 还有分析定理的直观解释. 笔记中的章节号与论文中的保持一致. 1. Introduction domain adaptation 的设定介绍: 有两个域, source domain…

轻量限制流量?阿里云轻量应用服务器月流量包收费说明

阿里云轻量应用服务器部分套餐限制月流量&#xff0c;轻量应用服务器按照套餐售卖&#xff0c;有的套餐限制月流量&#xff0c;有的不限制流量。像阿里云轻量2核2G3M带宽轻量服务器一年108元和轻量2核4G4M带宽一年297.98元12个月&#xff0c;这两款是不限制月流量的。阿里云百科…

中国植被功能型图(1km分辨率)

简介&#xff1a; 植被功能型&#xff08;PFT&#xff09;是根据植物种的生态系统功能及其资源利用方式而对宠大的植物种进行的组合&#xff0c;每一种植被功能型共享相似的植物属性&#xff0c;是将植物种的多样性简化为植物功能和结构的多样性,用以预测全球变化情景下生态系…

优盘中毒了怎么办?资料如何恢复

在现代社会中&#xff0c;优盘成为我们日常生活与工作中必备的便携式存储设备。然而&#xff0c;正是由于其便携性&#xff0c;优盘也成为病毒感染的主要目标之一。本篇文章将帮助读者了解如何应对优盘中毒的情况&#xff0c;以及如何恢复因病毒感染丢失的资料。 ▶优盘为什么…

简单好用的CHM文件阅读器 CHM Viewer Star最新 for mac

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件&#xff0c;支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计&#xff0c;支持多种浏览模式&#xff0c;如书籍模式、缩略图模式和文本模式等&#xff0c;并提供了丰富的功能和工具&#xff0c;如…

温度在线检测技术在电力电缆线路的应用

在电力电缆的日常运行检测中&#xff0c;针对电缆温度的状况&#xff0c;所采用的电力温度在线检测技术也得到了大范围的普及。电网系统中&#xff0c;其单位时间内可输送的电力能源受到其温度的变化影响。因此&#xff0c;采用更有效的方式实时检测电缆系统运行温度&#xff0…

Linux|qtcreator编译可执行程序双击运行

qt GUI window移植到linux参见&#xff1a;VS|vs2017跨平台编译linux&&CConsole&&QtGUI 参考&#xff1a;QtCreator修改项目的生成目录 文章目录 双击.pro文件&#xff0c;点击configureproject构建项目切换到release模式下双击打开pro文件&#xff0c;修改依赖…

WPF向Avalonia迁移(四、其他事项)

开发必备 1. Avalonia项目源代码&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;没有源代码&#xff0c;你连控件的背景色怎么改都找不着&#xff01;&#xff01; 2.下载你所使用的版本&#x…

【手写数字识别】数据挖掘实验二

文章目录 Ⅰ、项目任务要求任务描述&#xff1a;主要任务要求(必须完成以下内容但不限于这些内容)&#xff1a; II、实现过程数据集描述实验运行环境描述KNN模型决策树模型朴素贝叶斯模型SVM模型不同方法对MNIST数据集分类识别结果分析(不同方法识别对比率表及结果分析) 完整代…

李宏毅 2022机器学习 HW3 boss baseline 上分记录

作业数据是所有数据都有标签的版本。 李宏毅 2022机器学习 HW3 boss baseline 上分记录 1. 训练数据增强, private 0.760562. cross validation&ensemble, private 0.816473. test dataset augmentation, private 0.824584. resnet, private 0.865555. Image Normalizatio…

DP4054H完全兼容替代TP4054 36V 耐压 500mA 线性锂电充电芯片

产品概述&#xff1a; DP4054H是一款完整的采用恒定电流/恒定电压单节锂离子电池充电管理芯片。其SOT小封装和较少的外部元件数目使其成为便携式应用的理想器件&#xff0c;DP4054H可以适合USB 电源和适配器电源工作。由于采用了内部PMOSFET架构&#xff0c;加上防倒充电 路&am…

【微服务】RedisSearch 使用详解

目录 一、RedisJson介绍 1.1 RedisJson是什么 1.2 RedisJson特点 1.3 RedisJson使用场景 1.3.1 数据结构化存储 1.3.2 实时数据分析 1.3.3 事件存储和分析 1.3.4 文档存储和检索 二、当前使用中的问题 2.1 刚性数据库模式限制了敏捷性 2.2 基于磁盘的文档存储导致瓶…

【20】c++设计模式——>组合模式

组合模式定义 C组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;他允许将对象组合成树形结构来表示“部分-整体”的层次结构&#xff1b;在组合模式中有两种基本类型的对象&#xff1a;叶子对象和组合对象&#xff0c;叶子对象时没有子对象…

Websocket获取B站直播间弹幕教程——第二篇、解包/拆包

教程一、Websocket获取B站直播间弹幕教程 — 哔哩哔哩直播开放平台 1、封包 我们连接上B站Websocket成功后&#xff0c;要做两件事情&#xff1a; 第一、发送鉴权包。第二、发送心跳包&#xff0c;每30秒一次&#xff0c;维持websocket连接。 这两个包不是直接发送过去&…

无为WiFi的一批服务器

我们在多个地区拥有高速服务器&#xff0c;保证网速给力&#xff0c;刷片无压力 嘿嘿 <?phpinclude("./includes/common.php"); $actisset($_GET[act])?daddslashes($_GET[act]):null; $urldaddslashes($_GET[url]); $authcodedaddslashes($_GET[authcode]);he…

RxJava介绍及基本原理

随着互联网的迅猛发展&#xff0c;Java已成为最广泛应用于后端开发的语言之一。而在处理异步操作和事件驱动编程方面&#xff0c;传统的Java多线程并不总是最佳选择。这时候&#xff0c;RxJava作为一个基于观察者模式、函数式编程和响应式编程理念的库&#xff0c;为我们提供了…

30WSIP网络有源号角 50W SIP网络有源号角

30WSIP网络有源号角 50W SIP网络有源号角 SIP-7044是我司的一款SIP网络有源号角&#xff0c;具有10/100M以太网接口&#xff0c;内置有一个高品质扬声器&#xff0c;将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率30W。SIP-7044作为SIP系统的播放终端&#xf…

【photoshop学习】用 Photoshop 做的 15 件创意事

用 Photoshop 做的 15 件创意事 每个人总是谈论 Photoshop 的无限可能。您可以使用该程序做很多事情&#xff0c;列表几乎是无穷无尽的。 嘿&#xff0c;我是卡拉&#xff01;如果您花过一些时间使用 在线ps&#xff0c;您可能见过我&#xff08;并且注意到我提到了这一点&am…