平滑處理
Opencv實戰:
Opencv(1)讀取與圖像操作
Opencv(2)繪圖與圖像操作
Opencv(3)詳解霍夫變換
Opencv(4)詳解輪廓
文章目錄
- 平滑處理
- 1.均值濾波
- 2.方框濾波
- 3.高斯濾波
- 4.中值濾波
- 5.雙邊濾波
- 常見函數
- (1).createTrackbar()
- (2).SetMouseCallback()
圖像的平滑處理是在盡量圖像原有信息的情況下,過濾掉圖像內部的噪聲。由于圖像平滑處理的同時通常伴隨著圖像的模糊操作,有時圖像平滑處理也稱為圖像模糊處理。使用濾波器模板確定的鄰域內像素的平均/加權平均灰度值代替圖像中每個像素的值。平滑線處理濾波器也稱均值濾波器
1.均值濾波
dst = cv2.blur(src, ksize, anchor, borderType)
2.方框濾波
dst = cv2.boxFilter(src, ddepth, ksize, anchor, normalize, borderType)
3.高斯濾波
dst = cv2.GauusianBlur(src, ksize, sigmaX, sigmaY, borderType)
4.中值濾波
dst = cv2.medianBlur(src, ksize)
5.雙邊濾波
邊緣濾波保留是一種圖像處理技術,旨在在應用濾波器時保留圖像中的邊緣信息。在圖像處理中,濾波器通常用于平滑圖像或者增強特定的圖像特征,但是濾波器也可能導致邊緣信息的模糊或丟失。通過在濾波過程中保留邊緣信息,從而在平滑圖像的同時保持圖像中的邊緣清晰度
dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst, borderType)
-
d:過濾過程中每個像素鄰域的直徑范圍。如果不是正數,則函數會從參數 sigmaSpace 計算該值;
-
sigmaColor:顏色空間過濾器的 sigma 值,參數的值越大,表明該像素鄰域內有越寬廣的顏色會被混合到一起,產生較大的半等色區域;
-
sigmaSpace:坐標空間中濾波器的 sigma 值,如果該值較大,則意味著越遠的像素將相互影響,從而使更大的區域中足夠相似的顏色獲取相同的顏色。當 d>0 時,d 指定了鄰域大小且與 sigmaSpace 無關,否則 d 正比于 sigmaSpace。
一般將 sigmaSpace設置大一些,sigmaColor 設置小一些,最終呈現的效果較好。ygtr21`
常見函數
(1).createTrackbar()
C++: int createTrackbar(conststring& trackbarname, conststring& winname,int* value, int count, TrackbarCallback onChange=0,void* userdata=0);
第一個參數,const string&類型的trackbarname,表示軌跡條的名字
第二個參數,const string&類型的winname,窗口的名字
第三個參數,int* 類型的value,一個指向整型的指針,表示滑塊的位置。并且在創建時,滑塊的初始位置就是該變量當前的值。
第四個參數,int類型的count,表示滑塊可以達到的最大位置的值。滑塊最小的位置的值始終為0。
第五個參數,TrackbarCallback類型的onChange,默認值0。這是一個指向回調函數的指針,每次滑塊位置改變時,這個函數都會進行回調。并且這個函數的原型必須為void XXXX(int,void*);其中第一個參數是軌跡條的位置,第二個參數是用戶數據(看下面的第六個參數)。如果回調是NULL指針,表示沒有回調函數的調用,僅第三個參數value有變化。
第六個參數,void*類型的userdata,他也有默認值0。這個參數是用戶傳給回調函數的數據,用來處理軌跡條事件。如果使用的第三個參數value實參是全局變量的話,完全可以不去管這個userdata參數。
(2).SetMouseCallback()
void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)// winname:窗口的名字// onMouse:鼠標響應函數,回調函數。指定窗口里每次鼠標時間發生的時候,被調用的函數指針。
void on_Mouse(int event, int x, int y, int flags, void* param);// event是 CV_EVENT_*變量之一// x和y是鼠標指針在圖像坐標系的坐標(不是窗口坐標系) // flags是CV_EVENT_FLAG的組合, param是用戶定義的傳遞到setMouseCallback函數調用的參數。
event 具體說明如下:
-
EVENT_MOUSEMOVE 0 //滑動
-
EVENT_LBUTTONDOWN 1 //左鍵點擊
-
EVENT_RBUTTONDOWN 2 //右鍵點擊
-
EVENT_MBUTTONDOWN 3 //中鍵點擊
-
EVENT_LBUTTONUP 4 //左鍵放開
-
EVENT_RBUTTONUP 5 //右鍵放開
-
EVENT_MBUTTONUP 6 //中鍵放開
-
EVENT_LBUTTONDBLCLK 7 //左鍵雙擊
-
EVENT_RBUTTONDBLCLK 8 //右鍵雙擊
-
EVENT_MBUTTONDBLCLK 9 //中鍵雙擊
flags 具體說明如下:
-
EVENT_FLAG_LBUTTON 1 //左鍵拖曳
-
EVENT_FLAG_RBUTTON 2 //右鍵拖曳
-
EVENT_FLAG_MBUTTON 4 //中鍵拖曳
-
EVENT_FLAG_CTRLKEY 8 //(8~15)按 Ctrl 不放
-
EVENT_FLAG_SHIFTKEY 16 //(16~31)按 Shift 不放
-
EVENT_FLAG_ALTKEY 32 //(32~39)按 Alt 不放