亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于OpenCV技術的圖像處理及應用

        2019-04-22 06:52:33羅志高王變琴
        海峽科技與產業(yè) 2019年9期

        羅志高 王變琴

        摘要:利用OpenCV開源庫對圖像進行邊沿檢測、灰度化等一系列操作,得到圖像對應的特征像素矩陣,再通過RESTful方法實現(xiàn)數(shù)據(jù)傳輸、存儲,便于后續(xù)操作。實現(xiàn)了文件讀取、邊沿識別、矩陣獲取等功能的圖形化界面操作。

        關鍵詞:圖像處理;邊沿檢測;MFC;OpenCV;Visual Studio

        中圖分類號:TP274 ? ? ? ? ?文獻標識碼:A

        數(shù)字圖像處理是指通過計算機對圖像進行去噪聲、增強、復原、分割、提取特征等一系列處理的方法和技術。由于數(shù)字圖像的組成實質上是一個二維矩陣,數(shù)字圖像處理是對二維矩陣進行相關操作。數(shù)字圖像處理過程:圖像獲取、圖像增強、圖像濾波、灰度化、邊沿檢測、圖像分割、圖像壓縮編碼、圖像復原、圖像重建[1]。

        OpenCV是一個基于C/C++語言的開源圖像處理函數(shù)庫,它具有的諸多特性使其成為圖像處理研究者的首選工具。

        1 系統(tǒng)的架構設計

        數(shù)字圖像技術涵蓋方方面面,本文主要通過VS(Visual Studio)的MFC編程,實現(xiàn)一個具有圖像動態(tài)讀取、處理、保存和顯示[2]等功能的系統(tǒng)。整個系統(tǒng)包括文件操作、邊沿檢測、特征提取及查詢3個模塊及其子模塊,如圖1所示。

        1.1 文件操作設計

        動態(tài)選擇所需的圖像文件,放至指定的數(shù)據(jù)結構或相應控件,便于進一步處理。在處理完成之后,可以把所需存儲的文件以指定格式存儲至指定位置,便于之后查閱。

        1.2 邊沿檢測設計

        先將原彩圖進行灰度化,轉換為黑白圖,然后把圖像縮放至固定窗口,以便于用戶可以在同一界面查看原圖與處理后的圖像對比。然后利用Sobel邊沿檢測算子檢測出圖像邊沿,并展示至特定位置。同時根據(jù)效果。自行嘗試調節(jié)閾值得到最佳的邊沿圖像。

        1.3 特征提取及查詢設計

        在圖像處理之后,會得到處理后的圖像的矩陣信息,然后點擊查詢按鈕,連接遠程服務器,比對存儲在服務器中的數(shù)據(jù),將信息比較接近的圖片鏈接傳回,直接訪問返回的鏈接,查看系統(tǒng)返回的圖片是否為自己所需。

        1.4 圖像處理系統(tǒng)界面設計

        采用單一對話框,所有的東西都集成在一個界面,包含打開文件、保存、查詢等按鈕,全都是圖形界面交互,便于用戶操作。

        2 數(shù)字處理系統(tǒng)實現(xiàn)

        2.1 文件操作模塊的實現(xiàn)

        文件讀、寫、增、刪操作在計算機系統(tǒng)中具有相當重要的作用。操作系統(tǒng)本身就存儲在文件中,在系統(tǒng)啟動過程中加載到內存中,自動運行,所涉及的圖像、文檔、應用程序等都是以文件形式存儲到系統(tǒng)中的。

        2.2 控件類實現(xiàn)文件操作

        在MFC開發(fā)中,所有的操作都是對控件添加響應函數(shù)實現(xiàn)的,而要實現(xiàn)文件打開,即對“瀏覽”按鍵添加一個函數(shù)響應。在MFC中,已經集成了一個類CFileDialog可以實現(xiàn)對話框操作,這個函數(shù)如圖2所示。

        CFileDialog類型的函數(shù)dlg,可以實現(xiàn)對Windows文件操作的對話框,如圖2所示,該函數(shù)的參數(shù)意思表示該對話框是打開文件還是保存文件,true意味著該對話框為打開文件操作,false表示該操作是保存文件的對話框。文件的默認擴展名,如想打開jpg文件,則在對話框中默認顯示jpg類型的文件或是在保存時候默認保存為jpg格式的文件。要打開的目標文件名,可不指定文件擴展名,不指定則默認用第二個參數(shù)指定的擴展名。表示目標文件的狀態(tài),OFN_FILEMUSTEXIST表示目標必須存在,OFN_HIDEREADONLY不顯示只讀文件。過濾文件類型,如只顯示jpg或bmp格式文件,可自行選擇。

        獲取文件路徑,如圖3所示,可以用DoModal函數(shù),當用戶選定之后,用CFileDialog自帶的構造函數(shù)GetPathName獲取路徑、文件名和擴展名。就可以獲取所需要的文件,進行后續(xù)操作。同時用SetWindowText函數(shù)將路徑寫入文本控件,以便看到文件路徑等相關信息。

        2.3 邊沿檢測模塊的實現(xiàn)

        圖像的縮放就是把圖像按照比例進行特定的大小變換,為了使用戶在使用時能夠有更好的體驗,更加直觀地對比原圖像與處理后的圖像,把圖像限定在特定的區(qū)域。而每一幅圖像的大小都不一樣,對每一幅需要處理的圖像進行長和寬的變換,使其能夠適應展示窗口。如限定圖像展示區(qū)域的寬(L)和高(H)為400×245,假定每一幅圖像的寬、高分別為X、Y,需要算出變換的系數(shù)S1、S2,則有如下表達式:

        實際處理時,通過中間S1、S2表達式先求出系數(shù)S1、S2,然后根據(jù)后面表達式,就可以把圖像轉換成為特定大小的圖像了。由于需要把圖像固定在特定窗格,并放置于正中,還需要獲取圖像的位置,因此需要計算圖像在左上角的期望坐標作為原始坐標,以此進行圖像拓展,即可把圖像完整地縮放至特定的顯示窗格了,更加便于查看。邊沿檢測流程如圖4所示。

        通過上述流程,即可得到邊沿檢測后的圖像。

        2.4 圖像的灰度化

        要實現(xiàn)把彩色圖像轉變?yōu)橛闪涟当硎镜暮诎讏D,就需要了解彩圖的組成,最常用的彩色圖像格式有RGB、HSV、HLS等幾種。定義于RGB空間的彩圖,每個像素點由R、G、B 3個分量組成,分別代表紅、綠、藍。每個分量取不同的值,組合成的像素點就呈現(xiàn)出不同的顏色,多個像素點的組合就構成了一幅彩圖,常見的24深度彩圖,每個像素點的每個分量取值為0~255。HSV顏色模型的3個參數(shù)分別是色調、飽和度、亮度,是一種比較直觀的顏色模型,可轉換為RGB彩圖。HLS模型參數(shù)跟HSV類似,不過HLS是目前工業(yè)界的標準,比HSV更為強大,幾乎包括了目前人類所能感知的顏色,同樣可以轉換為RGB圖像。因此,研究RGB圖像灰度化即可得到其他圖像的灰度化方法,而對RGB圖像灰度化,即對RGB 3個分量轉為1個,最終得到由亮暗表示的灰度值。常見的方法如下:

        1)Gray=B;Gray=G;Gray=R;

        2)Gray=max(B+G+R);

        3)Gray=(B+G+R)/3;

        4)Gray=0.072169B+0.715160G+0.212671R;

        5)Gray=0.11B+0.59G+0.3R。

        方法一,用RGB分量的隨便一個值作為該點的灰度;方法二,選取3個分量中最大的作為灰度;方法三,求取3個分量的平均值作為灰度值;方法四與方法五都是根據(jù)相應特性對3個分量進行加權平均,方法五的權值是從生理學的角度,即人眼對顏色的敏感度得出,方法四則是OpenCV所采用的加權值。我們基于OpenCV進行的圖像處理,當然就是用的方法四,即通過VS內置函數(shù),獲取圖像3個分量的大小,然后設定灰度值Y。根據(jù)方法四,算出灰度值Y,然后渲染,即可把彩圖轉換為用亮暗表示的灰度圖了。

        2.5 基于一階導數(shù)的邊沿檢測

        邊沿檢測是圖像處理重要的環(huán)節(jié),需要按照以下步驟獲取邊沿圖像。

        ①需要對圖像進行灰度化,這個步驟已經在上一步實現(xiàn)了。由于圖像通常都會受到無關信息的干擾,因此需要對圖像進行濾波處理,用于消除圖像中的隨機噪聲。鑒于本系統(tǒng)是基于OpenCV實現(xiàn)的,因此需要了解一下OpenCV所采用的高斯濾波。

        ②高斯濾波的實現(xiàn),就是采用一個矩陣模板進行加權運算。舉個例子,八連通區(qū)域的圖像,中間點的像素值就等于八連通區(qū)域像素值的均值,以達到平滑的效果,該矩陣模板就是常說的高斯核。假定高斯核維數(shù)為(2k+1)×(2*+1),則離散高斯核的矩陣計算如下:

        ③得到濾波后的圖像之后,就可利用一階偏導的有限差分來計算梯度的幅值和方向了。一般來說,獲取灰度圖梯度可用有限差分近似,然后得到圖像在X、Y方向上偏導數(shù)的兩個矩陣,叫做梯度算子。常用的梯度算子有Roberts算子、Sobel算子、Prewitt算子、Canny算子。本文采用的是Canny算子,Canny算法選取的卷積算子根據(jù)實際情況可以隨意調整,采用的是三維,其實采用的是Sobel算子,因為Sobel算子對灰度漸變和噪聲較多的圖像處理效果較好。矩陣表達式如下:

        由上式求得矩陣后,即可進對梯度幅值進行非極大值抑制。顧名思義,非極大值抑制就是把不是極大值的像素點視為不存在,即為0,把極大值突出體現(xiàn),記為1,由此得到一個二值化矩陣。問題就轉換為如何確定極大值,很顯然,需要比較每個像素點的灰度值與其領域像素點的灰度值,通常比較四領域或八領域。在上一步求偏導的過程中,已經得到了梯度的方向,因而只需比較該方向上的領域像素點的大小即可,若該點為極大值,則記為1,否則,幅值為0。

        ④上一步之后,邊沿的地方基本都變?yōu)?,其他地方變?yōu)?,邊沿圖像近在眼前。然而實際操作中,噪聲的去除卻不是那么完善,極大值確定也有可能判斷不出,導致出現(xiàn)很多假邊沿,需要進一步處理,以得到更為接近真實邊沿的邊沿圖像,這就是邊沿檢測的最后一步,用雙閾值算法檢測和連接邊沿,也是Canny算法比較優(yōu)于其他算法的地方。

        雙閾值算法把先滿足高閾值的像素點連接起來,如果不閉合,則把部分與高閾值鄰域且滿足低閾值的像素點連接起來,最后把選出來的這些像素點連接起來,就得到邊沿檢測圖了。本文的開發(fā)是基于OpenCV開源庫的一個應用軟件,通過有效利用資源,OpenCV已經幫我們封裝了一個函數(shù),可以完成上述的進程。這個函數(shù)是vCanny(constCVArr* image,CVArr* edges,double threshold1,double threshold2,intaperture_size=3)。各參數(shù)含義如下:image,單通道輸入圖像,待處理圖像的灰度圖;edges,單通道輸出圖像,得到的邊沿檢測圖;threshold1,閾值1,較低的閾值;threshold2,閾值2,較高的閾值;aperture_size,內核算子的維度,OpenCV采用的算子是Sobel算子,故該值為3。因此只需要把原圖像轉變?yōu)榛叶葓D之后調用該函數(shù),即可得到灰度圖,同時閾值可以機動調節(jié),代碼如圖5所示。

        多次結果證明,低閾值與高閾值的比例在1:2至1:3之間得到的圖像效果最好。至此邊沿檢測完成。

        3 矩陣信息提取模塊的實現(xiàn)

        OpenCV中圖像與矩陣的轉換:就是把圖像對應的像素點用矩陣描述出來。在OpenCV中,已經存在這樣一個庫函數(shù),直接調用即可。庫函數(shù)如下。

        cvCreateMat(param1,param2,param3)

        param1:矩陣的行數(shù),通常用*->width,以滿足不同大小的圖片;

        param2:矩陣的列數(shù),通常用*->height,以滿足不同尺寸的圖片;

        param3:矩陣元素類型,通常以CV_<比特數(shù)>(S|U|F)C<通道數(shù)>型式描述。

        然后直接調用該函數(shù),就可以把圖片轉換成矩陣形式了。

        二值化圖像矩陣:可以把邊沿檢測圖轉化為矩陣,作為存儲依據(jù),這也是最優(yōu)的方案。但本文沒有這樣做,主要是考慮到執(zhí)行順序、效率和界面美觀。倘若用邊沿檢測圖直接轉化矩陣,則需要在邊沿檢測圖完成之后,再次觸發(fā),就必須在界面重新設置一個能夠使其響應的控件,影響界面美觀;若置于同一響應函數(shù),又需要考慮先后問題。因此,本文采用灰度化后的圖片,將其與閾值調節(jié)放置于同一響應函數(shù),并發(fā)執(zhí)行。實現(xiàn)如圖6所示。

        利用CV_MAT_ELEM函數(shù)把矩陣的每一個元素提取出來,然后做判斷,高于某值的設為1,低于某值的設為0,即可獲得二值化矩陣。

        4 信息查詢模塊的實現(xiàn)

        4.1 VS網絡請求的實現(xiàn)

        VS的MFC發(fā)起網絡請求與大部分網絡請求一樣,利用RESTful框架,即通常所說的HTTP請求,包括GET和POST兩種方式。實現(xiàn)過程即調用HTTP請求或相應相關函數(shù),需要注意參數(shù)的類型與GET或POST請求的吻合,以及URL的正確性。

        4.2 信息展示

        把從網頁查詢得到的數(shù)據(jù),通過JSON傳回,解析之后,顯示在對應的控件中。為了便于查看,需要在服務器端進行信息比對,如果有相似信息圖片,則把對應URL或搜索關鍵字進行展示,否則提示不存在。系統(tǒng)整體實現(xiàn)效果如圖7所示

        如圖7所示,a為原圖像,b為縮小后放至固定大小控件中的圖像。原圖像尺寸為800×600,經過變換,變?yōu)檫m應窗口大小的400×245,效果十分明顯[3]。

        5 結語

        綜上所述,本文主要研究了數(shù)字圖像處理系統(tǒng)的設計與實現(xiàn),選用了VS 2015開發(fā)界面,為用戶提供了一個數(shù)字圖像處理的GUI平臺,對圖像處理方法進行研究,包括圖像的縮放,灰度變換,濾波處理,邊沿檢測及矩陣提取等使用OpenCV庫,利用VS 2015開發(fā)了一套包含文件讀取、邊沿檢測、矩陣提取等功能的數(shù)字圖像處理系統(tǒng),界面友好,對用戶沒有專業(yè)門檻限制,對話框基本滿足用戶使用需求,同時有很強的拓展性。

        參考文獻

        [1] 陳天華.數(shù)字圖像處理[M].北京:清華大學出版社,2007.

        [2] 常奇峰.基于VC++的數(shù)字圖像處理軟件開發(fā)[D].南京:南京航空航天大學,2010.

        [3] 賀東霞,李竹林,王靜.淺談數(shù)字圖像處理的應用與發(fā)展趨勢[J].延安大學學報(自然科學版),2013,32(12):18-21.

        天堂女人av一区二区| 色视频线观看在线网站| 又粗又粗又黄又硬又深色的| 精品久久无码中文字幕| 日本色偷偷| 久久精品天堂一区二区| 国产内射一级一片内射视频| 一本久久a久久精品vr综合| 精品国产黑色丝袜高跟鞋| 午夜福利视频男同女同| av男人的天堂第三区| 一个色综合中文字幕人妻激情视频| 中文字幕久久久人妻无码| 国产精品久久久久久久久KTV| 欧美高h视频| 日韩av一区二区蜜桃| 亚洲色偷偷综合亚洲avyp| 亚洲性啪啪无码av天堂| 性导航app精品视频| 色综合久久久久综合一本到桃花网| 亚洲肥婆一区二区三区| 丰满熟妇乱又伦精品| 国产99久久精品一区二区| 中文字幕在线日韩| 国产伦精品一区二区三区在线| 免费一区二区高清不卡av| 无码国产精品一区二区免费式直播| 国产人妖视频一区二区| 亚洲国产成人资源在线桃色| 东京热日本道免费高清| 香蕉成人伊视频在线观看| 国产又黄又爽又色的免费| 国产亚洲欧美日韩综合一区在线观看 | 国产免费牲交视频| 玩弄少妇高潮ⅹxxxyw| 免费无码又爽又刺激又高潮的视频 | 97SE亚洲国产综合自在线不卡| 亚洲av成人波多野一区二区| 无套中出丰满人妻无码| 韩国三级中文字幕hd久久精品| 蜜桃视频中文字幕一区二区三区 |