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. vue 数据驱动原理,响应式 原理?

    Object.defineProperty(obj,"name",{ get(){ console.log("被访问了") return obox.innerH ...

  2. maven入门--part2 安装

    Maven安装和配置 (1)下载安装文件apache-maven-3.03-bin.tar (2)解压至安装目录,安装完毕 (3)修改.bash_profile,修改maven安装路径,修改构建GC配 ...

  3. 5.Hibernate 核心开发接口

    一.Configuration(AnnotationConfiguration) 作用:进行配置信息的管理 目标:用来产生SessionFactory 可以在configure 方法中指定hibern ...

  4. Python之if-else语句

    if--else语句if username == 'admin' and password == '123456': print('身份验证成功!') else: print('身份验证失败!')if ...

  5. Nginx返回大长度的JSON数据被截断

    1 添加Nginx参数,增加缓存字符串大小 head{ proxy_buffers 16 512k; //此处值代表nginx 设置 16个 512k 的块进行缓存,总共大小为16*512k prox ...

  6. Linux根文件系统和目录结构及bash特性1

    Linux文件系统:    内核并不真正负责具体的工作,这些工作是应用程序来负责的    Linux glibc    程序的编译方式:        动态链接式编译:        静态链接式编译: ...

  7. Spring mvc 初始化过程

    1.DispatcherServlet:获取servlet的name 2.XmlWebApplicationContext:获取contentConfigLocation的xml名称和namespac ...

  8. Hive的视图和索引(九)

    Hive的视图和索引 1.Hive Lateral View 1.基本介绍 ​ Lateral View用于和UDTF函数(explode.split)结合来使用. ​ 首先通过UDTF函数拆分成多行 ...

  9. Winform的高DPI问题

    现在的屏幕大部分都是高分屏,在这样的屏幕下开发winfrom软件就需要注意高DPI问题了 1.Form和UserControl的AutoScaleMode设置为Dpi 2.为项目添加应用程序清单文件( ...

  10. 为什么JAVA对象需要实现序列化?

    https://blog.csdn.net/yaomingyang/article/details/79321939 序列化是一种用来处理对象流的机制. 所谓对象流:就是将对象的内容进行流化.可以对流 ...