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. Win32 编程

    1.ShowWindow(SW_SHOWNORMAL)  参数 : SW_HIDE激活另外一个窗口,当前窗口就跑到那个窗口后面了SW_MAXIMIZE显示的窗口是最大化的SW_MINIMIZE显示的窗 ...

  2. 初识JavaScript对象

    JavaScript对象语法.类型.属性 属性描述符(getOwnPropertyDescriptor().defineProperty()) [[Get]].[[Put]].Getter.Sette ...

  3. 三主机配置 keepalived VIP高可用

    三台主机: 192.168.33.134 192.168.33.136 192.168.33.137   实验前: 关闭selinux 和iptables     1). 192.168.33.134 ...

  4. vue报错Maximum call stack size exceeded at abort (webpack-internal:///./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js:2079)

    报错原因: import cellDetail from '@/components/common/dialog/cellDetail.vue'; 解决方法: import celldetail fr ...

  5. win10下当前目录右键添加CMD快捷方式

    在某个文件夹下右键打开cmd,这样不用每次都在默认情况下切换目录.无奈win10 1703版本下shift+右键不能打开cmd,只能打开powershell. 首先,在桌面新建一个文本文档. Wind ...

  6. 分布式缓存Redis+Memcached经典面试题和答案

    Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 ( ...

  7. 第四篇.python的基础

    目录 第四篇.python基础01 1. 变量 2. 常量 3. python变量内存管理 4. 变量的三个特征 5. 花式赋值 6. 注释 7. 数据类型基础 8. 数字类型 9. 字符串类型 10 ...

  8. 开源you-get项目爬虫,以及基于python+selenium的自动测试利器

    写在前面 爬虫和自动测试,对于python来说是最合适不过也是最擅长的. 开源的项目也很多,例如you-get项目https://github.com/soimort/you-get.盗链和爬虫神器. ...

  9. laravel的下载与安装

    下载代码 https://github.com/laravel/laravel 在开发环境中配置好之后将根目录的 .env.example 文件改成 .env ,此文件是laravel的配置文件,将 ...

  10. 两步创建vue全局组件

    import Login from './Login' export default { install: function(Vue){ Vue.component('Login', Login); ...