[25] cuda 应用之 nppi 实现图像色彩调整

news2025/2/6 6:10:56

[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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis常见数据类型与编码方式

⭐️前言⭐️ 本小节围绕Redis中常见的数据类型与编码方式展开。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及博主日常练习代码均已上传GitHu…

大型三甲医院算力网络架构的深度剖析与关键技术探索

一、引言 1.1 研究背景与意义 1.1.1 医疗信息化发展趋势 随着信息技术的迅猛发展&#xff0c;全球医疗行业正经历着深刻的数智化转型。数字化转型已成为医疗行业提升服务质量、优化运营效率、推动医学科研创新的关键驱动力。从电子病历系统的普及到远程医疗的广泛应用&#…

CSV数据分析智能工具(基于OpenAI API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手&#xff0c;你的回应内容取决于用户的请求内容。1. 对于文…

产品经理的人工智能课 02 - 自然语言处理

产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型&#xff08;Large Language Models, LLMs&#xff09;是自然语…

华为手机nova9,鸿蒙系统版本4.2.0.159,智慧助手.今天版本是14.x,如何卸载智慧助手.今天?

手欠&#xff0c;将手机鸿蒙系统升级到4.2.0.159后&#xff0c;出现了负一屏&#xff0c;负一屏就是主页向左滑&#xff0c;出现了&#xff0c;如图的界面&#xff1a; 华为鸿蒙系统负一屏的界面 通过在手机中我的华为-搜索“开启或关闭智慧助手.今天&#xff08;负一屏&#…

win32汇编环境,窗口程序中自定义工具栏的使用示例

;运行效果 ;win32汇编环境,窗口程序中自定义工具栏的使用示例 ;工具栏一般放在菜单下面&#xff0c;相当于一个个小的对话框&#xff0c;当然你放在其它地方也可以。 ;原理是&#xff0c;创建一张BMP位图&#xff0c;比如下例用一张168*24的图&#xff0c;平均分成7部分&#x…

【PyQt】pyqt小案例实现简易文本编辑器

pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器&#xff0c;使用PyQt5框架构建。以下是代码的主要功能和特点&#xff1a; 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…

2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)

一&#xff1a;Node.js安装 浏览器中搜索Nodejs&#xff0c;或直接用网址:Node.js — 在任何地方运行 JavaScript 建议此处下载长期支持版本&#xff08;红框内&#xff09;: 开始下载&#xff0c;完成后打开文件: 进入安装界面&#xff0c;在此处勾选&#xff0c;再点击n…

【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)特殊字符 总结 前言 在当今的软件开发领域&#xff0c…

JVS低代码逻辑引擎多种业务场景触发案例配置:涵盖列表页按钮、表单数据、流程审批、外部API接口调用等

逻辑引擎作为JVS低代码开发套件的核心组件&#xff0c;专注于业务逻辑的快速构建与实现&#xff0c;它扮演着程序配置与执行的核心角色&#xff0c;适用于多样化的应用场景。该逻辑引擎设计灵活&#xff0c;能够通过多种配置方式被触发&#xff0c;以精准响应各类业务需求并实现…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)

#作者&#xff1a;闫乾苓 文章目录 RabbitMQ简介RabbitMQ与VMware的关系架构工作流程RabbitMQ 队列工作模式及适用场景简单队列模式&#xff08;Simple Queue&#xff09;工作队列模式&#xff08;Work Queue&#xff09;发布/订阅模式&#xff08;Publish/Subscribe&#xff…

计算机网络笔记再战——理解几个经典的协议4

目录 IP——网际协议 IP地址 1. A类地址 2. B类地址 3. C类地址 4. D类地址&#xff08;组播地址&#xff09; 5. E类地址&#xff08;保留地址&#xff09; 特殊地址与私有地址 广播地址 IP多播 子网掩码 传统分类与CIDR/VLSM的对比 路由控制 默认路由 主机路由…

Java CountDownLatch 用法和源码解析

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

两种文件类型(pdf/图片)打印A4半张纸方法

环境:windows10、Adobe Reader XI v11.0.23 Pdf: 1.把内容由横排变为纵排&#xff1a; 2.点击打印按钮&#xff1a; 3.选择打印页范围和多页&#xff1a; 4.内容打印在纸张上部 图片&#xff1a; 1.右键图片点击打印&#xff1a; 2.选择打印类型&#xff1a; 3.打印配置&am…

Vue3状态管理: Pinia使用技巧与最佳实践

Vue3状态管理: Pinia使用技巧与最佳实践 随着Web应用复杂度的提升&#xff0c;前端状态管理变得愈发重要。而在Vue3中&#xff0c;Pinia作为一种全新的状态管理工具&#xff0c;为我们提供了更加灵活和强大的状态管理解决方案。本文将从Pinia的基本概念入手&#xff0c;深入探讨…

stm32点灯 GPIO的输出模式

目录 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置&#xff08; 默认不变&#xff09;HSI 高速内部时钟8Mhz 5.项目配置 6.代码 延时1s循环LED亮灭 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置&#xff08; 默认不变&#xff09…

腾讯会议win7二维码展示不出来

问题&#xff1a;win64更新后二维码展示不出来&#xff0c;手机等登陆都不行 安装所在位置创建文档命名TBSDEBUG并去掉后缀

swift 专题三 swift 规范一

一、Swift编码命名规范 对类、结构体、枚举和协议等类型的命名应该采用大驼峰法&#xff0c;如 SplitViewController。 文件名采用大驼峰法&#xff0c;如BlockOperation.swift。 对于扩展文件&#xff0c;有时扩展定义在一个独立的文件中&#xff0c;用“原始类型名 扩展名…

WPS计算机二级•幻灯片放映与会议

听说这是目录哦 放映PPT时常用的快捷技巧&#x1f96c;设置放映模式&#x1f955;演讲备注的添加和隐藏&#x1fada;在PPT中插入附件并放映时打开&#x1fadb;隐藏幻灯片 不被放映和打印&#x1f344;‍&#x1f7eb;演讲计时模式&#x1f966;能量站&#x1f61a; 放映PPT时…

FBX SDK的使用:基础知识

Windows环境配置 FBX SDK安装后&#xff0c;目录下有三个文件夹&#xff1a; include 头文件lib 编译的二进制库&#xff0c;根据你项目的配置去包含相应的库samples 官方使用案列 动态链接 libfbxsdk.dll, libfbxsdk.lib是动态库&#xff0c;需要在配置属性->C/C->预…