日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV学习笔记(七):形态学morpholgy(1):腐蚀/膨胀:enrode(),dilate()

發(fā)布時間:2024/7/23 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV学习笔记(七):形态学morpholgy(1):腐蚀/膨胀:enrode(),dilate() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OpenCV學(xué)習(xí)筆記(七):形態(tài)學(xué)(morpholgy):腐蝕/膨脹:enrode(),dilate()

數(shù)學(xué)形態(tài)學(xué)(Mathematical morphology) 是一門建立在格論和拓?fù)鋵W(xué)基礎(chǔ)之上的圖像分析學(xué)科,是數(shù)學(xué)形態(tài)學(xué)圖像處理的基本理論。其基本的運算包括:二值腐蝕和膨脹、二值開閉運算、骨架抽取、極限腐蝕、擊中擊不中變換、形態(tài)學(xué)梯度、Top-hat變換、顆粒分析、流域變換、灰值腐蝕和膨脹、灰值開閉運算、灰值形態(tài)學(xué)梯度等。

簡單來講,形態(tài)學(xué)操作就是基于形狀的一系列圖像處理操作。膨脹與腐蝕能實現(xiàn)多種多樣的功能,主要如下:
1.消除噪聲
2.分割(isolate)出獨立的圖像元素,在圖像中連接(join)相鄰的元素。
3.尋找圖像中的明顯的極大值區(qū)域或極小值區(qū)域
4.求出圖像的梯度

一、膨脹就是求局部最大值的操作
按數(shù)學(xué)方面來說,膨脹或者腐蝕操作就是將圖像(或圖像的一部分區(qū)域,我們稱之為A)與核(我們稱之為B)進行卷積。
核可以是任何的形狀和大小,它擁有一個單獨定義出來的參考點,我們稱其為錨點(anchorpoint)。多數(shù)情況下,核是一個小的中間帶有參考點和實心正方形或者圓盤,其實,我們可以把核視為模板或者掩碼。
而膨脹就是求局部最大值的操作,核B與圖形卷積,即計算核B覆蓋的區(qū)域的像素點的最大值,并把這個最大值賦值給參考點指定的像素。這樣就會使圖像中的高亮區(qū)域逐漸增長。

二、腐蝕就是求局部最小值的操作。
膨脹和腐蝕是一對好基友,是相反的一對操作,所以腐蝕就是求局部最小值的操作。

代碼:

#include <opencv2/opencv.hpp>using namespace cv; using namespace std;Mat g_srcImage, g_dstImage; //原始圖和效果圖 int g_nTrackbarNumer = 1; //0表示腐蝕erode, 1表示膨脹dilate int g_nStructElementSize = 7; //結(jié)構(gòu)元素(內(nèi)核矩陣)的尺寸int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 1、載入原圖if(g_nTrackbarNumer==0)g_srcImage = imread("F:/C++/2. OPENCV 3.1.0/TEST/erode.jpg");elseg_srcImage = imread("F:/C++/2. OPENCV 3.1.0/TEST/dilate.png");if( !g_srcImage.data ) { printf("讀取srcImage錯誤~! \n"); return false; }// 2、顯示原始圖namedWindow("【原始圖】");imshow("【原始圖】", g_srcImage);// 3、進行初次腐蝕操作并顯示效果圖(初始化顯示)namedWindow("【效果圖】");Process();// 4、創(chuàng)建軌跡條createTrackbar("腐蝕/膨脹", "【效果圖】", &g_nTrackbarNumer, 1, on_TrackbarNumChange); // 切換開關(guān)createTrackbar("內(nèi)核尺寸", "【效果圖】", &g_nStructElementSize, 21, on_ElementSizeChange); // 內(nèi)核大小改變// 5、輸出一些幫助信息cout<<endl<<"\t運行成功,請調(diào)整滾動條觀察圖像效果~\n\n"<<"\t按下“q”鍵時,程序退出。\n";//輪詢獲取按鍵信息,若下q鍵,程序退出while(char(waitKey(1)) != 'q') {}return a.exec(); }

1)自定義的腐蝕或膨脹處理函數(shù)

void Process() {// 1、獲取自定義核Mat element = getStructuringElement(MORPH_ELLIPSE, Size(2*g_nStructElementSize+1, 2*g_nStructElementSize+1),Point(-1,-1));// 2、進行腐蝕或膨脹操作if(g_nTrackbarNumer == 0){erode(g_srcImage, g_dstImage, element);}else{dilate(g_srcImage, g_dstImage, element);}// 3、顯示效果圖imshow("【效果圖】", g_dstImage); }

2)切換開關(guān) 回調(diào)函數(shù)

void on_TrackbarNumChange(int, void *) {//腐蝕和膨脹之間效果已經(jīng)切換,回調(diào)函數(shù)體內(nèi)需調(diào)用一次Process函數(shù),使改變后的效果立即生效并顯示出來Process(); }

3)內(nèi)核調(diào)整 回調(diào)函數(shù)

void on_ElementSizeChange(int, void *) {//內(nèi)核尺寸已改變,回調(diào)函數(shù)體內(nèi)需調(diào)用一次Process函數(shù),使改變后的效果立即生效并顯示出來Process(); }

結(jié)果:
erode

dilate

總結(jié)

以上是生活随笔為你收集整理的OpenCV学习笔记(七):形态学morpholgy(1):腐蚀/膨胀:enrode(),dilate()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。