Python 影像平滑濾波-cv2.filter2D

說明

影像處理的流程中有一個filter的function: 2D捲積=> cv2.filter2D(),是濾波器的概念,濾波器會把一些資訊過濾,一些資訊通過,這樣的想法是用於訊號上,在影像則是對影像的陣列做捲積,捲積也就是所謂的 convolution,把它想成內積就可以了,以上是自己的理解,如果有錯歡迎指導。

參考其中一篇文中對影像作平均濾波的動作,可以調整濾波器的內核定義,以下範例解釋。

操作流程

Code

import cv2
import numpy as np

img = cv2.imread('XXX.png')
cv2.namedWindow('original', cv2.WINDOW_NORMAL)
cv2.resizeWindow("original", 640, 480)
cv2.imshow("original", img)
cv2.waitKey(-1)


kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
cv2.namedWindow('result', cv2.WINDOW_NORMAL)
cv2.resizeWindow("result", 640, 480)
cv2.imshow("result", dst)
cv2.waitKey(-1)

DEMO濾波器內核為5*5=25

這邊的內核設定為5*5共識25個像素上,也就是這張圖片對這個25的陣列做內積,以25成為一格,將這個格的做平均成為相同的,然後取代原先的值,從這個觀念來看,如果是把這個內積現在為25若是擴大圖片看起來會越模糊。

DEMO濾波器內核為100*100=10000

與剛剛的圖片相比模糊很多。

補充其他濾波的方法

blur = cv2.blur(img,(5,5))
blur = cv2.GaussianBlur(img,(5,5),0)
median = cv2.medianBlur(img,5)

留言