NPP库使用入门

本文介绍了Intel IPP库和NVIDIA的NPP库在图像处理中的应用,尤其是均值滤波。NPP作为GPU加速库,其计算速度远超CPU。通过对比IPP和NPP的计算结果,揭示了两者在处理相同任务时存在的差异。文章还提及高斯滤波和其他任意系数滤波,并提到了CUDA开发环境的搭建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像处理的过程中经常会使用到Intel的ipp库(Integrated Performance Primitives),IPP库包含了许多底层优化的函数。如果已经安装了IPP库,opencv在运行时也会自动调用。
近年来,随着计算机视觉的快速发展,使用GPU进行图像处理越来越流行和展现出优势。NVIDIA公司针对GPU开发了的GPU加速的图像、视频、信号处理库NPP(NVIDIA Performance Primitives)。
从取名就可以看出两者之间有着双胞胎一般的相似。事实上,NPP和IPP库函数基本上是一一对应,不同的是一个在CPU上计算一个在GPU上计算。
高度优化的NPP计算单元,执行速度比仅使用CPU要快80倍。
在这里插入图片描述

ipp 均值滤波

使用IPP 之前需要安装IPP或者拥有相应的库环境

#include <opencv2/opencv.hpp>
#include "ipp.h"
#include <memory>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "npp.h"

#define check_sts(st) if((st) != ippStsNoErr) throw std::exception("run error") /* Go to Exit if IPP function returned status different from ippStsNoErr */


int filterBoxBorder_ipp(cv::Mat src, cv::Mat dst)
{
	IppStatus status = ippStsNoErr;
	Ipp8u* pSrc = NULL, *pDst = NULL;     /* Pointers to source/destination images */
	int srcStep = 0, dstStep = 0;         /* Steps, in bytes, through the source/destination images */
	IppiSize roiSize; /* Size of source/destination ROI in pixels */
	Ipp8u *pBuffer = NULL;                /* Pointer to the work buffer */
	std::vector<Ipp8u> buffer;
	int iTmpBufSize = 0;                  /* Common work buffer size */
	IppiBorderType borderType = ippBorderRepl;
	Ipp8u borderValue = 254;
	IppiSize maskSize = { 3,3 };
	int numChannels = 1;

	//pSrc = ippiMalloc_8u_C1(roiSize.width, roiSize.height, &srcStep);
	//pDst = ippiMalloc_8u_C1(roiSize.width, roiSize.height, &dstStep);
	pSrc = src.data;
	pDst = dst.data;
	srcStep = src.step; 
	dstStep = dst.step;
	roiSize = { src.size().width, src.size().height };

	check_sts(status = ippiFilterBoxBorderGetBufferSize(roiSize, maskSize, ipp8u, numChannels, &iTmpBufSize));
	buffer.resize(iTmpBufSize);
	//pBuffer = ippsMalloc_8u(iTmpBufSize);

	check_sts(status = ippiFilterBoxBorder_8u_C1R(pSrc, srcStep, pDst, dstStep, roiSize, maskSize, borderType, &borderValue, buffer.data()));

		//EXIT_MAIN
	//ippsFree(pBuffer);
	//ip
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值