NPP图像处理库

news/2024/12/2 20:43:51/

介绍

NVIDIA 2D Image And Signal Performance Primitives (NPP)
英伟达二维图像和信号高性能计算库

官方文档:NVIDIA 2D Image And Signal Performance Primitives (NPP): Image-Processing Specific API Conventions

函数命名

不同的图像数据处理函数根据不同的后缀进行区分:

  • “A” 如果图像是 4 通道图像,处理函数将不会处理 alpha 通道;
  • “Cn” 图像数据的排列方式为像素优先,n 可以是 1,2,3 或 4,OpenCV 图像数据采用像素优先排列方式;
  • “Pn” 图像的数据排列方式为通道优先,n 可以是 1,2,3 或 4,GDAL 图像使用通道优先的方式,一般神经网络的数据输入输出也是这种方式;
  • “I” 原地操作,图像处理直接在输入图像的内存地址进行;
  • “M” M 即为 Mask,标识操作为蒙版操作,只有对应位置的蒙版图像的像素值不为0的位置的数据才会被处理。
  • “R” R 即为 ROI,只有在指定的图像区域进行图像处理;
  • “Sfs” 在输出结果之前,通过固定的缩放比例和饱和度进行处理;

实现OpenCV的 dnn::blobFromImage 函数

blobFromImage 函数主要做了两个操作:

  1. 图像 resize 到指定的大小
  2. 图像数据类型转为 float

npp中对应的两个函数,图像缩放函数 nppiResize_8u_C1R 和 数据类型转换函数 nppiConvert_8u32f_C1R。

// 1 channel 8-bit unsigned image resize.
NppStatus 
nppiResize_8u_C1R(const Npp8u * pSrc, int nSrcStep, NppiSize oSrcSize, NppiRect oSrcRectROI, Npp8u * pDst, int nDstStep, NppiSize oDstSize, NppiRect oDstRectROI, int eInterpolation);// Single channel 8-bit unsigned to 32-bit floating-point conversion.
NppStatus 
nppiConvert_8u32f_C1R(const Npp8u  * pSrc, int nSrcStep, Npp32f * pDst, int nDstStep, NppiSize oSizeROI);

如果是三通道的图像,还涉及到图像数据排列方式的变换,nppiCopy_32f_C3P3R 函数将像素优先的排列方式转换成通道优先。

// 3 channel 8-bit unsigned image resize.
NppStatus 
nppiResize_8u_C3R(const Npp8u * pSrc, int nSrcStep, NppiSize oSrcSize, NppiRect oSrcRectROI, Npp8u * pDst, int nDstStep, NppiSize oDstSize, NppiRect oDstRectROI, int eInterpolation);// Single channel 8-bit unsigned to 32-bit floating-point conversion.
NppStatus 
nppiConvert_8u32f_C3R(const Npp8u  * pSrc, int nSrcStep, Npp32f * pDst, int nDstStep, NppiSize oSizeROI);// Three-channel 32-bit float packed to planar image copy.
NppStatus
nppiCopy_32f_C3P3R(const Npp32f * pSrc, int nSrcStep, Npp32f * const aDst[3], int nDstStep, NppiSize oSizeROI);

使用npp进行图像resize

// 图像resize
// interMode 1:最近邻,2:线性插值
// 返回值参考 NppStatus
int gpu_resize_npp(unsigned char* pSrc, int wSrc, int hSrc, int channel, unsigned char* pDst, int wDst, int hDst, int interMode)
{NppiSize oSrcSize, oDstSize;oSrcSize.width = wSrc;oSrcSize.height = hSrc;oDstSize.width = wDst;oDstSize.height = hDst;NppiRect oSrcRectROI, oDstRectROI;oSrcRectROI.x = 0;oSrcRectROI.y = 0;oSrcRectROI.width = wSrc;oSrcRectROI.height = hSrc;oDstRectROI.x = 0;oDstRectROI.y = 0;oDstRectROI.width = wDst;oDstRectROI.height = hDst;NppStatus ns = NppStatus::NPP_NUMBER_OF_CHANNELS_ERROR;switch (channel){case 1:ns = nppiResize_8u_C1R(pSrc, wSrc, oSrcSize, oSrcRectROI, pDst, wDst, oDstSize, oDstRectROI, interMode);break;case 3:ns = nppiResize_8u_C3R(pSrc, wSrc * 3, oSrcSize, oSrcRectROI, pDst, wDst * 3, oDstSize, oDstRectROI, interMode);break;default:break;}return (int)ns;
}

http://www.ppmy.cn/news/311133.html

相关文章

网络营销的4p营销理论

网络营销的4P营销理论 4p理论(The Marketing Theory of 4Ps),4P理论产生于20世纪60年代的美国,随着营销组合理论的提出而出现的。1953年,尼尔博登(NeilBorden)在美国市场营销学会的就职演说中创造了“市场营销组合”&…

营销组合4P

一、营销组合的发展 营销组合4P于1953年由尼尔博登在美国市场营销学会的就职演说中提出,后经过其他的学者的不断完善,目前已经从营销组合4P升级到了10P,在这里我就只给大家分享一下4P的相关内容 二、营销组合4P定义 营销组合4P由4个P字母开…

【数据湖架构】Azure 数据湖分析(Azure Data Lake Analytics )概述

在本文中,我们将探索 Azure 数据湖分析并使用 U-SQL 查询数据。 Azure 数据湖分析 (ADLA) 简介 Microsoft Azure 平台支持 Hadoop、HDInsight、数据湖等大数据。通常,传统数据仓库存储来自各种数据源的数据,将数据转换为单一格式并进行分析以…

手机主板射频处理器

射频处理器电路一般会有多个芯片。射频处理器电路一般封装在屏蔽罩下面。射频处理器电路芯片周围有多个小电感。 顺着天线可以找到天线测试接口,然后找到射频处理器电路,这是在主板上查找射频处理器电路的关键点。

不愧是阿里大牛整理的java高级工程师面试 1000 题,面面俱到,太全了

4 月份利用空余时间收集整理了一份《java 高级工程师面试 1000 题》,初衷也很简单,就是希望在面试复习的时候能够帮助到大家,减轻大家的负担和节省时间。 前几天定了初稿,朋友圈分享了一波,收到了很多建议&#xff0c…

【webflux】Flux判断一个Bean对象是否有多个指定名称的元素并返回Tuples

在 WebFlux 中,我们可以使用 Flux 来判断一个 List 中的 Bean 对象是否有多个指定名称的元素,并将结果封装到 Tuples 中返回。具体步骤如下: 使用 Flux 对 List 中的每个 Bean 对象进行操作 首先,我们需要使用 Flux 对 List 中的每…

【华为OD统一考试B卷 | 100分】 查找众数及中位数(C++ Java JavaScript Python)

题目描述 众数是指一组数据中出现次数量多的那个数,众数可以是多个。中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数。查找整型数组中…

Rocketmq 一文带你搞懂rocketmq基础

1.集群架构 从上图可以看出来一共有4个部分,分别为Producer,Consumer,NameServer,Broker 1.1 NameServer集群 虽然说NameServer是一个集群,但是每一个NameServer是独立的,不会相互同步数据,因为每个节点都会保存完整的数据&#…