Inter IPP 绘图 ippi/ipps
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的更多相关文章
- Inter IPP & Opencv 在centos 环境下使用GCC命令行编译c++运行
Inter IPP & Opencv 的安装看这里:https://www.cnblogs.com/dzzy/p/11332907.html 考虑到服务器一般没有桌面环境,不能用IDE编译,直 ...
- Inter IPP 处理图像数据的方法
Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能. opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下: int main(int argc, ch ...
- Inter IPP+ VS + opencv 在 Windows下的环境搭建
首先Inter官网申请和下载:https://software.intel.com/en-us/intel-ipp 需要VS2013或更高版本(先装vs再装IPP,我的版本是VS2015社区版,IPP ...
- Inter IPP 跟 Microsoft V100编译器区别
最近做项目用了两个编译器,由于是一种精度的算法计算,对计算的精度要求非常高,同时都用的float型,发现inter的结果比vs的结果好许多.但是不知道是什么原因,最后测试发现,是两个编译器的问题. ...
- Inter IPP & Opencv + codeblocks 在centos 环境下的配置
一.先安装codeblocks wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noar ...
- Inter IPP的一些基本类型对应的vs中类型
来自为知笔记(Wiz)
- (原)配置vs2013使用intel的IPP库
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5473890.html 参考网址: https://software.intel.com/en-us/n ...
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
随机推荐
- Kendall tau距离(即两个内容相同的数组中逆序数对的数量)(算法》P220 第2.5.3.2小节)
一组排列就是一组N个整数的数组,其中0~N-1的每个数都只出现一次.两个排列之间的 Kendall tau距离就是在两组排列中相对顺序不同的数对的数目.例如,0 3 1 6 2 5 4和1 0 3 6 ...
- 1 .net将xml反序列化
public static T XmlToObject<T>(string str) where T : class { using (Stream stream = new Memory ...
- js中——限制文本框输入非数字
//先把非数字的都替换掉,除了数字和.和/ obj.value = obj.value.replace(/[^\-\d./]/g, ""); //必须保 ...
- 第十五章、线程之queue模块的各种队列
目录 第十五章.线程之queue模块的各种队列 一.Queue 二.LifoQueue堆栈 三.PriorityQueue优先级队列 第十五章.线程之queue模块的各种队列 一.Queue impo ...
- 小白进阶之Scrapy第六篇Scrapy-Redis详解(转)
Scrapy-Redis 详解 通常我们在一个站站点进行采集的时候,如果是小站的话 我们使用scrapy本身就可以满足. 但是如果在面对一些比较大型的站点的时候,单个scrapy就显得力不从心了. 要 ...
- 什么是PAM认证
PAM(Pluggable Authentication Modules )是由 Sun 提出的一种用于实现应用程序的认证机制.其核心是一套共享库,目的是提供一个框架和一套编程接口,将认证工作由程序员 ...
- Delphi ADO组件
樊伟胜
- python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用
python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...
- 08-【jsp重点】
jsp的四个作用域和9个内置对象 jsp内置对象[重点]:pageContext.request.session.application.response.out.page.exception.con ...
- 基于MYCAT中间件实现MYSQL读写分离
基于mycat实现mysql读写分离 完成主从复制的配置 /* 主节点:192.168.47.101 从节点:192.168.47.102 */ /*mycat为同一网段客户端*/ /* 修改主节点基 ...