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()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
随机推荐
- C# WebApi日期格式化
WebApi中日期格式化:在WebApiConfig文件中加入如下代码即可,之前遇到的问题,日期中总带有T,现在记录一下解决的方法. 代码: private static void ReturnDat ...
- 02 Go程序执行流程
一.把源码编译成二进制后执行 .go代码源文件 => go build => 可执行文件(.exe文件或者linux二进制文件) => 运行结果 二.对源码直接运行 .go源代码文件 ...
- The last packet successfully received from the server was 39,900 milliseconds ago问题解决
1,之前用Mysql或者mycat的时候都没有这个问题.后来改为haproxy+keepalived+mycat后出现这个问题 2,网上查了很多说法,我按照网上说的改了 datasource: url ...
- 转载Linux常用命令
转自:https://blog.csdn.net/deng_xj/article/details/88803148 Linux常用shell命令 [root@dengxj]#各项含义[用户名@计算机名 ...
- Unexpected console statement (no-console)
在vue cli项目中用consloe.log()打印,启动项目报错 export default { name: 'app', components: { }, created() { this.t ...
- hbase shell 基本操作
hbase shell 基本操作 启动HBASE [hadoop@master ~]$hbase shell 2019-01-24 13:53:59,990 WARN [main] ut ...
- 《设计模式之美》 <01>为什么需要学习掌握设计模式?
1. 应对面试中的设计模式相关问 题学习设计模式和算法一样,最功利.最直接的目的,可能就是应对面试了.不管你是前端工程师.后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类 ...
- TensorFlow可以在终端和通过终端打开的PyCharm中运行,不能在直接打开的PyCharm中运行
然后看运行窗口的出错信息,点击最右边的view,发现缺少个文件,如代码所示 Traceback (most recent call last): File "/usr/local/lib/p ...
- java开发技巧
1,IDEA辅助功能Shift +F2去到有错误的地方Alt+Enter,会给出解决错误的建议: 2,调试,没问题的步骤,直接跳过,不要跳入细节: 调试时,要明确要跟踪的变量,不要陷入混乱: 3,调试 ...
- BZOJ 1002 生成树计数&高精度
给你定义一种特殊的图 这种图总共有n个节点 假设编号为0~n-1 首先1~n-1排成环形 每个点与相邻的两个点有边 其次这n-1个节点每个和0节点有一条边 每次询问你一个n 要回到当前n节点的特殊图有 ...