IPP的资料网上比较少,主要还是参考Inter官网和文档

官方文档ipps.pdf主要是对数据做处理,包括加减乘除、FFT、DFT等

文档ippi.pdf只要是对图像做处理,包括通道转换、图片处理等

IPP最新的几个版本删掉了生成图片的函数,所以使用IPP加速计算,然后再用opencv生成本地图片

1、搭建VS+IPP+Opencv环境(前一篇文章)

2、IPP的数据Ipp32f 转换成 Opencv的Mat数据

#define READ_BYTES 32768
#define RC 8192
Ipp32f *specturmData = ippsMalloc_32f(READ_BYTES);//创建Ipp32f
//添加给specturmData 赋值之类的操作
//........
//........
int num=;
Mat mat;
mat.create(READ_BYTES, RC, CV_32F);//创建mat数组,设定数组高度为32768,长度为8192,也就是画出一幅图32768*8192
while(num<RC)//把specturmData 赋给mat
{
for (int i = ; i < READ_BYTES ; i++)
{
mat.at<float>(i, num) = specturmData[i];//逐个赋值
if (specturmData[i] > max)
max = specturmData[i];
if (specturmData[i] < min)
min = specturmData[i];
}
num++;
}

3、将mat存成本地图片

//添加对mat的数据处理
//......
//......
imwrite("my.bmp", mat);//画图

4、用IPP 做FFT变换

新版的IPP删除了ippsFFTInitAlloc_R_32f等函数,如图文档附录给出了替代方案

int   CalculateSpectrumByReal(short* rData, int samplePoint, float* specturmData, int &outSpecturmDataLength,
int winOpt, int fftOrder)/*计算频谱*/
{
IppStatus status;
int segement, fftPoint;
IppsFFTSpec_R_32f* spec; fftPoint = (int)pow(2.0, fftOrder); //FFT 点数
outSpecturmDataLength = fftPoint / ; //输出数据长度 = FFT点数的一半 Ipp32f *fData = ippsMalloc_32f(samplePoint);//设置浮点数组 fData
Ipp32f *x = ippsMalloc_32f(fftPoint);//设置浮点数组 x
Ipp32f *X = ippsMalloc_32f(fftPoint + );//设置浮点数组 X
Ipp32f *mag = ippsMalloc_32f(outSpecturmDataLength);//求abs()后的幅度数据 一半的下标 memset(fData, , sizeof(Ipp32f)*samplePoint); //初始化
memset(x, , sizeof(Ipp32f)*fftPoint);//初始化
memset(X, , sizeof(Ipp32f)*(fftPoint + ));//初始化
memset(mag, , sizeof(Ipp32f)*outSpecturmDataLength);//初始化
memset(specturmData, , sizeof(Ipp32f)*outSpecturmDataLength);//初始化
ippsConvert_16s32f(rData, fData, samplePoint);//转ipp结构 int sizeSpec = ;
int sizeInit = ;
int sizeBuffer = ;
   /*替代已经去掉的ippsFFTInitAlloc_R_32f函数*/
status = ippsFFTGetSize_R_32f(fftOrder, IPP_FFT_DIV_INV_BY_N, ippAlgHintAccurate, &sizeSpec, &sizeInit, &sizeBuffer);
Ipp8u *pMemSpec = ippsMalloc_8u(sizeSpec);
Ipp8u *pMemInit = ippsMalloc_8u(sizeInit);
Ipp8u *pMemBuffer = ippsMalloc_8u(sizeBuffer);
status = ippsFFTInit_R_32f(&spec, fftOrder, IPP_FFT_DIV_FWD_BY_N, ippAlgHintAccurate, pMemSpec, pMemInit);
segement = (int)(samplePoint / fftPoint); //做FFT时的分段数 参数设定
for (int i = ; i<segement; i++)
{
memcpy(x, fData + i*fftPoint, fftPoint * sizeof(Ipp32f));
status = ippsFFTFwd_RToCCS_32f(x, X, spec, pMemBuffer); //do fft...
ippsMagnitude_32fc((Ipp32fc*)X, mag, outSpecturmDataLength); //abs()...
ippsAdd_32f_I(mag, specturmData, outSpecturmDataLength);
}
ippsDivC_32f_I(segement, specturmData, outSpecturmDataLength);//求平均
ippsLn_32f_I(specturmData, outSpecturmDataLength); //求Ln,因为IPP函数不支持浮点的10Log10计算这里通过Ln进行转换计算
ippsDivC_32f_I(2.3026, specturmData, outSpecturmDataLength);// log(e,10)=2.3026
ippsMulC_32f_I(20.0, specturmData, outSpecturmDataLength); //20log10() ippsFree(spec);
ippsFree(fData);
ippsFree(x);
ippsFree(X);
ippsFree(mag);
return status;
}

https://www.cnblogs.com/dzzy/p/11242466.html

Inter IPP 绘图 ippi/ipps的更多相关文章

  1. Inter IPP & Opencv 在centos 环境下使用GCC命令行编译c++运行

    Inter IPP & Opencv 的安装看这里:https://www.cnblogs.com/dzzy/p/11332907.html 考虑到服务器一般没有桌面环境,不能用IDE编译,直 ...

  2. Inter IPP 处理图像数据的方法

    Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能. opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下: int main(int argc, ch ...

  3. Inter IPP+ VS + opencv 在 Windows下的环境搭建

    首先Inter官网申请和下载:https://software.intel.com/en-us/intel-ipp 需要VS2013或更高版本(先装vs再装IPP,我的版本是VS2015社区版,IPP ...

  4. Inter IPP 跟 Microsoft V100编译器区别

    最近做项目用了两个编译器,由于是一种精度的算法计算,对计算的精度要求非常高,同时都用的float型,发现inter的结果比vs的结果好许多.但是不知道是什么原因,最后测试发现,是两个编译器的问题.   ...

  5. Inter IPP & Opencv + codeblocks 在centos 环境下的配置

    一.先安装codeblocks wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noar ...

  6. Inter IPP的一些基本类型对应的vs中类型

    来自为知笔记(Wiz)

  7. (原)配置vs2013使用intel的IPP库

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5473890.html 参考网址: https://software.intel.com/en-us/n ...

  8. 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示

    使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  9. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

随机推荐

  1. C# WebApi日期格式化

    WebApi中日期格式化:在WebApiConfig文件中加入如下代码即可,之前遇到的问题,日期中总带有T,现在记录一下解决的方法. 代码: private static void ReturnDat ...

  2. 02 Go程序执行流程

    一.把源码编译成二进制后执行 .go代码源文件 => go build => 可执行文件(.exe文件或者linux二进制文件) => 运行结果 二.对源码直接运行 .go源代码文件 ...

  3. The last packet successfully received from the server was 39,900 milliseconds ago问题解决

    1,之前用Mysql或者mycat的时候都没有这个问题.后来改为haproxy+keepalived+mycat后出现这个问题 2,网上查了很多说法,我按照网上说的改了 datasource: url ...

  4. 转载Linux常用命令

    转自:https://blog.csdn.net/deng_xj/article/details/88803148 Linux常用shell命令 [root@dengxj]#各项含义[用户名@计算机名 ...

  5. Unexpected console statement (no-console)

    在vue cli项目中用consloe.log()打印,启动项目报错 export default { name: 'app', components: { }, created() { this.t ...

  6. hbase shell 基本操作

    hbase shell  基本操作 启动HBASE [hadoop@master ~]$hbase shell      2019-01-24 13:53:59,990 WARN  [main] ut ...

  7. 《设计模式之美》 <01>为什么需要学习掌握设计模式?

    1. 应对面试中的设计模式相关问 题学习设计模式和算法一样,最功利.最直接的目的,可能就是应对面试了.不管你是前端工程师.后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类 ...

  8. TensorFlow可以在终端和通过终端打开的PyCharm中运行,不能在直接打开的PyCharm中运行

    然后看运行窗口的出错信息,点击最右边的view,发现缺少个文件,如代码所示 Traceback (most recent call last): File "/usr/local/lib/p ...

  9. java开发技巧

    1,IDEA辅助功能Shift +F2去到有错误的地方Alt+Enter,会给出解决错误的建议: 2,调试,没问题的步骤,直接跳过,不要跳入细节: 调试时,要明确要跟踪的变量,不要陷入混乱: 3,调试 ...

  10. BZOJ 1002 生成树计数&高精度

    给你定义一种特殊的图 这种图总共有n个节点 假设编号为0~n-1 首先1~n-1排成环形 每个点与相邻的两个点有边 其次这n-1个节点每个和0节点有一条边 每次询问你一个n 要回到当前n节点的特殊图有 ...