[25] cuda 应用之 nppi 实现图像色彩调整
[25] cuda 应用之 nppi 实现图像色彩调整
在 NPPI(NVIDIA Performance Primitives)中,图像色彩调整通常包括以下几种操作:
- 亮度调整:增加或减少图像的亮度。
- 对比度调整:增强或减弱图像的对比度。
- 饱和度调整:增强或减弱图像的颜色饱和度。
- 色调调整:改变图像的色调(通常在 HSL 色彩空间中)。
NPPI 提供了一些函数来执行这些操作,这些函数通常操作的是图像的每个像素值或者调整图像的整体属性。
亮度调整
- 亮度调整是通过对图像的每个像素值增加或减少常数来实现的。可以使用
nppiAddC_8u_C3R函数来实现。
NppStatus nppiAddC_8u_C3R(const Npp8u* pSrc, int nSrcStep,Npp8u* pDst, int nDstStep,NppiSize oSize, int nValue);- 参数说明:
pSrc:输入图像数据的指针。
nSrcStep:输入图像的步长。
pDst:输出图像数据的指针。
nDstStep:输出图像的步长。
oSize:图像尺寸(宽度和高度)。
nValue:要增加或减少的亮度值。
//for ex
NppiSize oSize = {width, height};
Npp8u* pSrc = ...; // 输入图像
Npp8u* pDst = ...; // 输出图像
int nSrcStep = width * 3; // RGB 图像步长
int nDstStep = width * 3; // RGB 图像步长
int nBrightness = 30; // 增加亮度的值// 增加亮度
NppStatus status = nppiAddC_8u_C3R(pSrc, nSrcStep, pDst, nDstStep, oSize, nBrightness);
if (status != NPP_SUCCESS) {std::cout << "Error in brightness adjustment!" << std::endl;
}
对比度调整
- 对比度调整是通过乘以一个常数来实现的,这会改变图像的亮度差异。可以使用
nppiMultiplyC_8u_C3R来实现对比度调整。
NppStatus nppiMultiplyC_8u_C3R(const Npp8u* pSrc, int nSrcStep,Npp8u* pDst, int nDstStep,NppiSize oSize, int nValue);- 参数说明:
pSrc:输入图像数据的指针。
nSrcStep:输入图像的步长。
pDst:输出图像数据的指针。
nDstStep:输出图像的步长。
oSize:图像尺寸(宽度和高度)。
nValue:对比度调整的系数。
//for ex
NppiSize oSize = {width, height};
Npp8u* pSrc = ...; // 输入图像
Npp8u* pDst = ...; // 输出图像
int nSrcStep = width * 3; // RGB 图像步长
int nDstStep = width * 3; // RGB 图像步长
int nContrast = 2; // 对比度增强系数(大于1增强对比度,小于1减弱对比度)// 增强对比度
NppStatus status = nppiMultiplyC_8u_C3R(pSrc, nSrcStep, pDst, nDstStep, oSize, nContrast);
if (status != NPP_SUCCESS) {std::cout << "Error in contrast adjustment!" << std::endl;
}
颜色平衡
nppiColorBalance_8u_C3R用于调整图像的颜色平衡。该函数通常用于调整红色、绿色和蓝色通道的增益,从而使图像的色彩分布得到改善或特定调整。
NppStatus nppiColorBalance_8u_C3R(const Npp8u* pSrc, int nSrcStep,Npp8u* pDst, int nDstStep,NppiSize oSize, float* pScaleFactors);- 参数说明:
pSrc: 输入图像的数据指针(RGB 图像,8 位无符号整数类型)。
nSrcStep: 输入图像的步长(每行的字节数)。
pDst: 输出图像的数据指针(调整后的 RGB 图像)。
nDstStep: 输出图像的步长(每行的字节数)。
oSize: 图像的尺寸(宽度和高度),类型为 NppiSize。
pScaleFactors: 存储每个通道增益因子的数组。该数组的长度至少为 3,分别对应红色、绿色和蓝色通道的增益因子。
pScaleFactors[0]:红色通道的增益因子。
pScaleFactors[1]:绿色通道的增益因子。
pScaleFactors[2]:蓝色通道的增益因子。返回值:
NPP_SUCCESS: 成功执行。
NPP_ERR_NULL_POINTER: 指针参数为空。
NPP_ERR_SIZE_MISMATCH: 输入和输出图像的尺寸不匹配。
NPP_ERR_GENERIC_ERROR: 一般错误。
#include <npp.h>
#include <iostream>int main() {// 图像的宽度和高度int width = 640;int height = 480;// 输入和输出图像数据Npp8u* pSrc = new Npp8u[width * height * 3]; // 输入图像(RGB格式)Npp8u* pDst = new Npp8u[width * height * 3]; // 输出图像// 输入和输出图像步长(每行字节数)int nSrcStep = width * 3;int nDstStep = width * 3;// 图像尺寸NppiSize oSize = {width, height};// 设置通道增益因子float pScaleFactors[3] = {1.2f, 1.0f, 0.8f}; // 红色通道增益1.2倍,绿色通道不变,蓝色通道减弱为0.8倍// 调用nppiColorBalance_8u_C3R函数进行颜色平衡调整NppStatus status = nppiColorBalance_8u_C3R(pSrc, nSrcStep, pDst, nDstStep, oSize, pScaleFactors);if (status != NPP_SUCCESS) {std::cerr << "Error in color balance adjustment!" << std::endl;delete[] pSrc;delete[] pDst;return -1;}// 图像处理成功,可以保存或显示 pDst 图像std::cout << "Color balance adjustment completed successfully!" << std::endl;// 清理资源delete[] pSrc;delete[] pDst;return 0;
}相关文章:
[25] cuda 应用之 nppi 实现图像色彩调整
[25] cuda 应用之 nppi 实现图像色彩调整 在 NPPI(NVIDIA Performance Primitives)中,图像色彩调整通常包括以下几种操作: 亮度调整:增加或减少图像的亮度。对比度调整:增强或减弱图像的对比度。饱和度调…...
Redis常见数据类型与编码方式
⭐️前言⭐️ 本小节围绕Redis中常见的数据类型与编码方式展开。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博主日常练习代码均已上传GitHu…...
inter i5 6300U 可以干嘛
Intel Core i5-6300U 是一款发布于 2015 年的双核四线程处理器,属于 Intel 第六代 Skylake 架构的低功耗移动处理器(TDP 15W)。虽然它不是最新的处理器,但在日常使用中仍然可以胜任许多任务。以下是它适合的用途: 1. 日…...
不可控的内存分配(CWE-789)
漏洞描述:内存分配的大小受外部控制的输入数据影响,且程序没有指定内存分配大小的上限 漏洞风险:攻击者可以使程序分配大量的内存,程序可能会因为内存资源不足而奔溃。 修复或规避建议: 设定合理的内存分配上限&…...
大型三甲医院算力网络架构的深度剖析与关键技术探索
一、引言 1.1 研究背景与意义 1.1.1 医疗信息化发展趋势 随着信息技术的迅猛发展,全球医疗行业正经历着深刻的数智化转型。数字化转型已成为医疗行业提升服务质量、优化运营效率、推动医学科研创新的关键驱动力。从电子病历系统的普及到远程医疗的广泛应用&#…...
获取要素类或表中的字段列表
要素类和表中往往包含一个或多个属性信息,可以通过ListFields()函数获取要素类中的字段列表. 操作方法: 1.打开IDLE,新建一个脚本窗口 2.导入arcpy模块 3.设置工作空间 arcpy.env.workspace "" 4.在try语句中对<>要素调用ListFields()方法 try:fieldlis…...
Android原生开发入门
1. 资源地址 Android官方教程Android参考手册 2. 必看基础模块 应用基础知识View 绑定 :绑定相当于Qt中的ui文件生成界面代码的机制,Qt中的ucc会自动将ui文件编译成ui_xxxx.h文件,Android开发中也一样。 Android中自动生成的代码在&#x…...
网络设备的安全加固
设备的安全始终是信息网络安全的一个重要方面,攻击者往往通过控制网络中设备来破坏系统和信息,或扩大已有的破坏。网络设备包括主机(服务器、工作站、PC)和网络设施(交换机、路由器等)。 一般说来ÿ…...
验证工具:VCS与Verdi介绍
VCS和Verdi都是Synopsys公司旗下的工具,在集成电路设计和验证领域发挥着重要作用。 VCS VCS,全称Verilog Compile Simulator,是Synopsys公司的一款Verilog仿真工具。它具有以下主要功能: 编译和仿真:VCS能够对Verilog设计代码和testbench进行编译,生成simv二进制可执行…...
CSV数据分析智能工具(基于OpenAI API和streamlit)
utils.py: from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手,你的回应内容取决于用户的请求内容。1. 对于文…...
【Day31 LeetCode】动态规划DP Ⅳ
一、动态规划DP Ⅳ 1、最后一块石头的重量II 1049 这题有点像脑筋急转弯,尽量让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。明白这一点,就与上一篇博客里的划分等和数组很相似。划分等和数组…...
产品经理的人工智能课 02 - 自然语言处理
产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型(Large Language Models, LLMs)是自然语…...
华为手机nova9,鸿蒙系统版本4.2.0.159,智慧助手.今天版本是14.x,如何卸载智慧助手.今天?
手欠,将手机鸿蒙系统升级到4.2.0.159后,出现了负一屏,负一屏就是主页向左滑,出现了,如图的界面: 华为鸿蒙系统负一屏的界面 通过在手机中我的华为-搜索“开启或关闭智慧助手.今天(负一屏&#…...
C#面试常考随笔13: 泛型的主要约束和次要约束是什么?
在 C# 泛型中,主要约束和次要约束用于限制泛型类型参数的使用,确保类型参数满足一定的条件,从而提高代码的可靠性和可维护性。以下是主要约束和次要约束的详细介绍: 主要约束 引用类型约束(class)&#x…...
win32汇编环境,窗口程序中自定义工具栏的使用示例
;运行效果 ;win32汇编环境,窗口程序中自定义工具栏的使用示例 ;工具栏一般放在菜单下面,相当于一个个小的对话框,当然你放在其它地方也可以。 ;原理是,创建一张BMP位图,比如下例用一张168*24的图,平均分成7部分&#x…...
【PyQt】pyqt小案例实现简易文本编辑器
pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器,使用PyQt5框架构建。以下是代码的主要功能和特点: 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…...
2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)
一:Node.js安装 浏览器中搜索Nodejs,或直接用网址:Node.js — 在任何地方运行 JavaScript 建议此处下载长期支持版本(红框内): 开始下载,完成后打开文件: 进入安装界面,在此处勾选,再点击n…...
DeepSeek R1的隐藏提问技巧?
deepseek属于推理模型,而不是指令模型,R1对提示词非常敏感。 1、需要更加真诚地与deepseek进行对话。 在用r1时,需要将此前的问答方式改变。 例如: 你现在是一个新能源汽车的市场研究分析师,这里有一份调研报告总结…...
【HTML入门】Sublime Text 4与 Phpstorm
文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域,…...
JVS低代码逻辑引擎多种业务场景触发案例配置:涵盖列表页按钮、表单数据、流程审批、外部API接口调用等
逻辑引擎作为JVS低代码开发套件的核心组件,专注于业务逻辑的快速构建与实现,它扮演着程序配置与执行的核心角色,适用于多样化的应用场景。该逻辑引擎设计灵活,能够通过多种配置方式被触发,以精准响应各类业务需求并实现…...
开发人员笔记本
为开发人员推荐大容量且性能稳定的电脑时,需考虑处理器、内存、存储、显卡和散热等因素。以下是几款适合开发的高性能电脑推荐: 1. Apple MacBook Pro 16英寸 (M2 Max/M2 Pro) 处理器: Apple M2 Max 或 M2 Pro内存: 32GB 或 64GB 统一内存存储: 1TB 或…...
RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)
#作者:闫乾苓 文章目录 RabbitMQ简介RabbitMQ与VMware的关系架构工作流程RabbitMQ 队列工作模式及适用场景简单队列模式(Simple Queue)工作队列模式(Work Queue)发布/订阅模式(Publish/Subscribeÿ…...
计算机网络笔记再战——理解几个经典的协议4
目录 IP——网际协议 IP地址 1. A类地址 2. B类地址 3. C类地址 4. D类地址(组播地址) 5. E类地址(保留地址) 特殊地址与私有地址 广播地址 IP多播 子网掩码 传统分类与CIDR/VLSM的对比 路由控制 默认路由 主机路由…...
Java CountDownLatch 用法和源码解析
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
深度学习在文本情感分析中的应用
引言 情感分析是自然语言处理(NLP)中的一个重要任务,旨在识别和提取文本中的主观信息。随着深度学习技术的发展,我们可以使用深度学习模型来提高情感分析的准确性和效率。本文将介绍如何使用深度学习进行文本情感分析,…...
C++编码规范(六)关于C++标准库STL在使用中的一些规范和建议
C 标准库STL是 C 编程语言的重要组成部分,为开发者提供了丰富的功能和工具,极大地提高了开发效率和代码的可移植性。 其主要包括:标准容器库,输入 / 输出流库,算法库,迭代器库,字符串库…...
两种文件类型(pdf/图片)打印A4半张纸方法
环境:windows10、Adobe Reader XI v11.0.23 Pdf: 1.把内容由横排变为纵排: 2.点击打印按钮: 3.选择打印页范围和多页: 4.内容打印在纸张上部 图片: 1.右键图片点击打印: 2.选择打印类型: 3.打印配置&am…...
Vue3状态管理: Pinia使用技巧与最佳实践
Vue3状态管理: Pinia使用技巧与最佳实践 随着Web应用复杂度的提升,前端状态管理变得愈发重要。而在Vue3中,Pinia作为一种全新的状态管理工具,为我们提供了更加灵活和强大的状态管理解决方案。本文将从Pinia的基本概念入手,深入探讨…...
stm32点灯 GPIO的输出模式
目录 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置( 默认不变)HSI 高速内部时钟8Mhz 5.项目配置 6.代码 延时1s循环LED亮灭 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置( 默认不变)…...
K8S运行时切换-从Docker到Containerd的切换实战
1. 切换的原因 性能提升:Containerd通过减少抽象层提升了整体性能。 安全性增强:它提供了更直接的系统调用,减少了潜在的安全风险。 简化架构:Containerd拥有更简洁的设计,使得维护和故障排除更为容易。 官方支持趋…...
