IPP是个好东西,里面的函数精而全,希望大家好好利用。因为IPP目前很少中文资料,我们只能靠自己摸索。下面就简单说说IPP在VC2005下的基本使用方法。
  假定你的IPP是安装在“D:/Intel/IPP”目录下。
  首先是配置VC2005的环境。打开VC2005后,点击菜单栏的“工具--选项”,在左侧找到“项目和解决方案--VC++目录”,在“可执行文件”的目录中添加“D:/Intel/IPP/bin”,在“包含文件”的目录中添加“D:/Intel/IPP/include”,在“库文件”中添加“D:/Intel/IPP/stublib”和“D:/Intel/IPP/lib”,确定即可。

  然后就是具体的在项目中使用IPP了。我们这次的项目主要是使用IPP的图像处理函数,这些函数的具体说明可以在“D:/Intel/IPP/doc/ippiman.pdf”这个文件中找到。函数的命名其实也是很有规律的,例如图像拷贝的函数,也就是手册里的“4.Image Data Exchange and Initialization Functions”中的Copy这一功能,对于不同的图像,应当使用不同的Copy函数,它的命名是这样的:首先是前缀“ippi”,所有图像处理的函数都以“ippi”开头;然后是功能名称“Copy”,连起来就是“ippiCopy”;之后连一个下划线和对应的模式“ippiCopy_<mod>”,那个“<mod>”替换成对应的颜色模式,例如“8u_C1R”,其中的“C1R”表示图像只有一个颜色通道,而“8u”表示每个象素的颜色的数据类型都是8位无符号数,也就是说这种图像是一个字节表示一个像素的。我们平时用的比较多的是“8u_C3R”,也就是三个颜色通道,每个通道的数据类型都是8位无符号数。但是显示的时候往往需要4个通道的,也就是除了RGB以外,还多了一个Alpha通道(透明度),这是因为我们的电脑一般都设成32位色深的。这时我们就需要把24位的图像转化成32位的,用“ippiCopy_8u_C3AC4R”这个函数就可以了。其中“8u_C3”就代表原始图像是8位无符号数据,3个通道,而AC4R就表示目标图像是带有Alpha通道的4通道图像。再看看函数的完整形式:

IppStatus ippiCopy_8u_C3AC4R(const Ipp<datatype>* pSrc, int srcStep,
Ipp<datatype>* pDst, int dstStep, IppiSize roiSize);

  其返回值是IppStatus,这个只要看看后面的返回值说明就知道啦,其实是一个整型值来的,只不过IPP里为了方便为这些值都用宏替换赋了名称,这里不再赘述。再来看看函数的参数,其中pSrc和pDst都是指针来的,pSrc就是源图像的图像数据指针,而pDst则指向目标图像的数据。前面的Ipp<datatype>*中的datatype需要替换成相应的数据类型代码,例如8位无符号数,就是“Ipp8u*”了,大家看看手册前面的Function Naming中的Data Types那一节就知道了。而srcStep和dstStep则是指行扫描宽度,也就是图像的一行占用多少字节,这个参数在许多图像处理的函数中都会用到。例如一个320*240的8u_C3R图像,它的行扫描宽度就是320*(3*8)/8=960了。需要注意的是,行扫描宽度必须是4的整数倍,也就是DWORD对齐的,对于不满足4的整数倍的,则应补零对齐。那么上面那条公式就不能适用所有图像了,不过可使用下面的代码来正确计算行扫描宽度:
(((width*channels*8)+31) >> 5) << 2
  其中width是图像的宽度,channels是通道数。
  最后的roiSize其实是一个IppiSize结构体来的,定义如下:
typedef struct {
    int width;
    int height;
} IppiSize;
  很明显就是图像的宽高了。这些结构体之类的基本类型定义都在手册的Function Naming中有详细说明。
  至于要使用这个函数需要包含哪个头文件呢?我们看到Copy函数的说明里后面有一句“The function ippiCopy is declared in the ippi.h file.”很好,#include "ippi.h"就是了。但是如果这样就直接编译,链接器便会告诉你有ippiCopy_8u_C3AC4R这么一个无法解析的外部符号。这是因为我们还没把库文件链接进来呢。ippi.h对应的库文件就是ippi.lib了。点击菜单的“项目--xxx属性--配置属性--链接器--输入”,在右边的“附加依赖项”中填入ippi.lib即可。若有多个库要使用,则用回车隔开。另外,为了兼容VC6.0的程序,在“项目--xxx属性--配置属性--常规”,右边的“字符集”应选择“多字节字符集”。
  而在“项目--xxx属性--配置属性--调试”中,“工作目录”应设为“D:/Intel/IPP/bin”,这样运行时程序才能调用IPP的动态链接库,或者把所需要的dll文件复制到你的Debug或Release文件夹下面也行。
  好了,至此我们的程序便可以编译运行了。感觉IPP用起来还是比较简便的,说明文档里也讲的很全,就是例子比较少,大家多实践实践应该比较容易上手的了。还是那句,边学边用,印象深,效率高。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/comeonface/archive/2008/03/05/2148486.aspx

关于Intel IPP的基本使用方法——参照可设置ipl库相关推荐

  1. 利用Intel IPP函数库实现信号频谱计算

    Intel IPP(Intel Integrated Performance Primitives)函数库是一套跨平台的软件函数库,它为用户提供了一套高效.实用的函数集,可用于实现通信.图像.语音等多 ...

  2. 了解Intel IPP

    IPP(Intel IPP)是一套跨平台的软件函数库,他提供了广泛的多媒体功能:音频解码器(例如: H263 . MPEG-4 ).图像处理 (JPEG) .信号处理.语音压缩等.好像比较适合多媒体开 ...

  3. Qt Creator配置Intel IPP库并实现信号带通滤波

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一.环境参数 二.添加步骤 1.安装IPP2018 2.配置环境变量 3.引入lib文件 三. 测试 输出结果 ...

  4. Intel IPP 之 视觉计算概述

    视觉计算软件开发基础 1.1 视觉计算概述 众所周知,早期的计算机的发明是科学计算的需要,其使用者主要是从事科学计算的科技工作者.随着计算机软硬件技术的发展,计算机的功能也在进一步扩展,开始从科技的象 ...

  5. [转]ubuntu下ATI/Intel双显卡切换的方法

    ubuntu下ATI/Intel双显卡切换的方法 来源:http://forum.ubuntu.com.cn/viewtopic.php?f=42&t=350772&sid=95f2a ...

  6. 如何下载 Intel Integrated Performance Primitives –intel IPP

    如何下载 Intel Integrated Performance Primitives –intel IPP 进入http://downloadcenter.intel.com/Default.as ...

  7. Intel IPP安装和安装测试

    一.IPP简介 英特尔®集成性能原语(Intel®IPP)是一种软件库,提供了广泛的功能,包括通用信号和图像处理.计算机视觉.数据压缩和字符串操作. 二.下载 1.搜索IPP 2.点击链接IntelR ...

  8. linux编译ipp多线程,Linux 下 Intel IPP 模块编译

    1. 平台搭建 平台 CentOs 6.3 2. IPP 下载 3. IPP 编译 不同版本的IPP 版本编译操作差异比较大,最好的办法就是查询下载版本的IPP模块中的document. 3.1  设 ...

  9. linux编译ipp多线程,Linux下Intel IPP编程环境的配置

    最开始使用了最新的7.0版本的IPP,编程引用时,总是提示一大堆undefined reference to 'XX'之类的错误,在网上找了好多资料,大部分是6.0以及之前的,我的环境是ubuntu ...

最新文章

  1. python0.1+0.2不等于0.3_为什么0.1 + 0.2不等于0.3?
  2. 图片加载之SDWebImage(上)
  3. 常用JavaScript语法107条
  4. 配置 SQL Server 2008 Email 发送以及 Job 的 Notification通知功能
  5. WindowsPhone 7.8 Tiles 1 : WideTile
  6. Taro 多端项目实践笔记
  7. 爬虫python下载视频_用python做爬虫下载视频
  8. 一个封装了的选项卡效果js
  9. 同步关键词synchronized
  10. c语言实现可变单链表,c语言实现单链表
  11. C++笔记整理(参考整理自各大博客)
  12. 使用批处理文件(batch file)替换字符串
  13. 使用axios 报 name.toUpperCase is not a function
  14. php 什么函数获取ip,php函数获取在线ip与客户端ip
  15. python:使用sklearn 计算 precision、recall、F1 score(多分类)
  16. NAS个人云存储服务器搭建
  17. python做数字识别_用python实现手写数字识别
  18. QML QtLocation地图应用学习-4:行政区划
  19. Unity TextMeshPro 制作字体用简体中文字符集 (仅用于开发)
  20. 路飞学城python开发ftp_路飞学城-Python开发集训-第1章

热门文章

  1. ansys怎么使用anand模型_当SpaceClaim 遇上ANSYS
  2. Java有哪些常用的转换类,JavaSE——常用类、类型转换
  3. java volatile实例_Java的Volatile实例用法及讲解
  4. Java基础---认识多态
  5. MySQL笔记(九)查询结果添加序列号
  6. phantomjs搭建输出js渲染后的html接口
  7. 【还是回来了】博客搬家--https://cangbean.github.io
  8. (三) UART 串口通讯
  9. issues:close 云端 STS 启动报找不到 jdk
  10. flutter向上动画弹出菜单效果