李志欣 卓亞琦
[摘 要]在數字圖像處理的實驗教學中引入OpenCV,具有其合理性和必要性。OpenCV處理圖像的應用于圖像變換和圖像邊緣檢測。將OpenCV引入數字圖像處理的實驗教學中,既能簡化圖像處理的編程,又能切實地提高學生的實踐能力,使學生深入理解圖像處理的基礎理論和典型算法,獲得了良好的實驗教學效果。
[關鍵詞]數字圖像處理 OpenCV 實驗教學 項目教學
[中圖分類號] G642.423 [文獻標識碼] A [文章編號] 2095-3437(2013)09-0042-02
一、引言
目前,大多數高校的數字圖像處理課程都是在引入Matlab集成的工具箱及其自帶函數的基礎上進行實驗教學[1]。由于Matlab程序的移植性較差,學生學習完成后不能直接面對實際的軟件開發和應用,難以真正提高學生的工程實踐動手能力。
為了讓學生既能掌握基本理論和技術,又能較容易編寫算法的程序,我們在數字圖像處理的教學中引入了開源的計算機視覺庫OpenCV(Open Source Computer Vision Library)。該軟件是以C 函數和C++類的形式實現大量圖像處理算法,學生可以方便地利用OpenCV 進行圖像處理算法的編程和驗證,進而在VC中開發功能更強大的應用程序。相對于Matlab而言,學生不僅可以利用OpenCV 開放的源代碼,以函數進行圖像處理,而且可以查看算法的代碼實現,更好地培養學生的編程能力[2]。
二、OpenCV概述
OpenCV是Intel公司資助的面向廣大研究人員和學生的開源計算機視覺庫,它由一系列C函數和少量C++類構成,實現了圖像處理和計算機視覺方面很多通用算法,同時提供了MatLab等語言的接口,因此極大地方便了圖像處理和視頻技術的二次開發[3]。
OpenCV主要包含六大模塊,其具體功能分別是[3]:(1) CV模塊:包含基本的圖形處理函數和高級的計算機視覺算法;(2) CVAUX模塊:包含輔助的OpenCV函數,一般存放一些被淘汰的算法和函數,同時也包含一些新出現的實驗性的算法和函數;(3) CXCORE模塊:包含OpenCV的基本數據結構和線性代數支持;(4) HIGHGUI模塊包含圖像和視頻的界面函數;(5) ML模塊:包含一些基于統計的分類和聚類工具,模式識別算法和回歸分析等;(6) CVCAM模塊:負責讀取攝像頭數據的模塊。
利用OpenCV進行程序開發具有以下幾個特點[4]:(1) 獨立性。OpenCV中大量的函數和類庫既可以獨立運行,也可以在加入其它外部庫的情況下運行;(2) 跨平臺性。構成OpenCV的API函數具有跨平臺性,不僅能很好的支持各種不同的操作系統,也可以很好地在不同公司的C/C++編譯器下工作;(3) 功能強大。OpenCV包含了線性表、樹、圖等基本數據結構,也包含圖像濾波、邊緣檢測和數字形態學等數字圖像處理的基本操作以及一些圖像高級處理功能;(4) 高效性。OpenCV的算法都是基于動態數據結構,使用Intel處理器指令集開發的優化代碼,運行速度快,處理效率高;(5) 開放性。OpenCV的源代碼是開放的,程序設計者可以直接修改它的源代碼,也可以將新的函數或類集成到它的庫中。
三、數字圖像處理的實驗設置
實驗是理論教學的有效輔助,對于數字圖像處理這類實踐性很強的課程就更加重要。通過閱讀和調試算法源代碼、體驗算法的處理效果,學生可以加深對基礎理論的理解。根據理論教學的重點難點內容,我們設計了相應的實驗項目,每個項目都要求學生運用OpenCV和Visual C++編程語言框架來編寫數字圖像處理基本算法。
項目教學法是針對課程體系結構設計出一系列學習單元項目,項目設計圍繞著具有典型性、啟發性的關鍵問題,學生通過參與項目完成的全過程實現對課程內容系統而深入的掌握[5]。項目教學法真正實現了以學生為中心、以教學目標為中心,實現理論方法學習與實踐動手能力培養的緊密結合。
本文基于項目教學法的研究,針對“數字圖像處理”課程教學體系結構,并結合教學大綱與教學目標要求,同時參考國外大學的相關課程,設置了以下實驗項目:
(1) 圖像變換。
(2) 圖像直方圖均衡化。
(3) 頻域圖像增強。
(4) 圖像邊緣檢測。
(5) 圖像分割。
(6) 人臉檢測。
通常,學生完成一個項目需要4個過程[6]:(1) 項目原理分析;(2) 項目具體流程設計;(3) 基于OpenCV的軟件設計;(4) 結果展示與分析。以上每個階段都要求學生提交階段報告,根據學生報告反映出的問題,老師有針對性地進行指導,在解決問題中幫助學生真正掌握所學的知識,并提高動手能力。在項目法教學過程中,我們特別要注意克服項目無法完全覆蓋全部知識點的局限,因此,要在項目選擇與設計中綜合考慮,并結合項目原理研究建立對教學體系框架和全部知識點的整體把握。
四、OpenCV處理圖像的應用實例
(一)圖像變換
OpenCV提供多個圖像變換函數。函數cvWarpAffine利用指定的矩陣對輸入圖像進行仿射變換,這類變換可以用一個3×3的矩陣來表示,其最后一行為(0, 0, 1)。典型的仿射變換包括平移變換、縮放變換、剪切變換、旋轉變換等。此外,函數cvWarpPerspective對圖像進行透視變換,函數cvLogPolar將圖像從直角坐標映射到極坐標,核心代碼如下:
IplImage* dst = cvCreateImage( cvSize(256,256), 8, 3 );
cvLogPolar( src, dst, cvPoint2D32f(src->width/2,src->height/2), 40 );
圖1給出了圖像映射到極坐標的結果實例。
(二)圖像邊緣檢測
圖像的邊緣是圖像最基本的特征,是灰度不連續的結果,因而邊緣檢測是圖像處理中的重要問題。OpenCV提供了cvSobel函數、cvLaplace函數和cvCanny等函數進行邊緣檢測,下面以cvLaplace函數進行舉例,其邊緣檢測的代碼為:
IplImage *result_img = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_8U, 1);
cvLaplace (img, result_img);
cvNamedWindow(“Result”, 0);
cvShowImage(“Result”, result_img);
第一句是創建一幅與原始圖像img同樣大小的通道數為1的圖像result_img;第二句是使用Laplace算子對圖像進行邊緣檢測,并將結果存放在result_img中,后面兩句是在窗口中顯示result_img。程序的處理結果如圖2 所示。
五、結束語
OpenCV中的函數幾乎能夠覆蓋到所有的數字圖像處理的基本功能,而且其代碼又是免費的和開放的。實踐證明,通過將OpenCV引入數字圖像處理的實驗教學中,既能簡化圖像處理的編程,又能切實地提高學生的實踐能力,使學生深入理解圖像處理的基礎理論和典型算法,獲得了良好的實驗教學效果。
[ 參 考 文 獻 ]
[1] 趙敏.Matlab用于數字圖像處理的教學實踐研究[J].電腦知識與技術,2012,8(31):7539–7540.
[2] 李樹濤,胡秋偉.OpenCV在“數字圖像處理”課程教學中的應用[J].電氣電子教學學報,2010,32(6):26–28.
[3] 劉瑞禎,于仕琪.OpenCV教程[M].北京:北京航空航天大學出版社,2008.
[4] 方玫.OpenCV技術在數字圖像處理中的應用[J].北京教育學院學報(自然科學版),2011,6(1):7–11.
[5] 郭艷光,趙希武.在高等計算機基礎教學中實施項目教學法的探索[J].計算機教育,2008,(6):48–49.
[6] 何楚,馮倩,楊芳等.數字圖像處理課程實驗教學過程設計[J].計算機教育,2011,(18):74–77.
[責任編輯:戴禎杰]