關於Intel IPP的基本使用方法——參照可設定ipl庫

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.