728x90
이미지 필터링이란 ?
각 알고리즘에 의해 픽셀의 값을 변경하여 이미지에 효과를 주는 것이라고 할 수 있습니다.
이것을 이용하면 이미지를 흐리게, 날카롭게, 뚜렷하게, 노이즈 제거 등 다양한 효과를 줄 수 있습니다.
다음 필터링 함수에 대해 알아봅니다.
-
blur()
-
GaussianBlur()
-
medianBlur()
-
bilateralFilter()
cv2.blur(src, ksize, dst=None, anchor=None, borderType=None)
기본적으로 이미지를 흐리게할 때 사용합니다.
도수 안맞은 안경쓴 느낌이 듭니다.
import cv2
import numpy as np
def onChange(k):
if k >= 1:
dst = cv2.blur(img, (k, k))
cv2.imshow('blur',dst)
img = cv2.imread('img.jpg')
# cv2.namedWindow('blur')
cv2.imshow('blur', img)
cv2.createTrackbar('k', 'blur', 0, 20, onChange)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
GaussianBlur 또한 흐림 효과를 주는데 blur 와는 차이가 있습니다.
또한 GaussianBlur는 전체적으로 밀도가 동일한 노이즈, 백색 노이즈를 제거하는 효과적이라고 합니다.
import cv2
import numpy as np
def onChange(k):
if k % 2 == 1: # k > 1 and k % 2 == 1
dst = cv2.GaussianBlur(img, (k, k), 0)
cv2.imshow('GaussianBlur', dst)
img = cv2.imread('img.jpg')
# cv2.namedWindow('blur')
cv2.imshow('GaussianBlur', img)
cv2.createTrackbar('k', 'GaussianBlur', 0, 20, onChange)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.medianBlur(src, ksize, dst=None)
노이즈를 제거하는 데 사용합니다. (아래 결과는 부적절한 이미지 사용)
import cv2
import numpy as np
def onChange(k):
if k % 2 == 1: # k > 1 and k % 2 == 1
dst = cv2.medianBlur(img, k)
cv2.imshow('medianBlur', dst)
img = cv2.imread('img.jpg')
# cv2.namedWindow('blur')
cv2.imshow('medianBlur', img)
cv2.createTrackbar('k', 'medianBlur', 0, 20, onChange)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
지금까지의 처리는 경계선이 흐려지는데 반해 bilateralFilter는 경계선을 유지합니다.
결과를 보면 뽀샵? 그림같은 느낌이 들기도 합니다.
import cv2
import numpy as np
def onChange(k):
dst = cv2.bilateralFilter(img, -1, k, k)
cv2.imshow('bilateralFilter', dst)
img = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
# cv2.namedWindow('blur')
cv2.imshow('bilateralFilter', img)
cv2.createTrackbar('k', 'bilateralFilter', 0, 20, onChange)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.bilateralFilter()
'OpenCV' 카테고리의 다른 글
파이썬 OpenCV 기하학적 변환 알아보기 -2 : 이미지 피라미드 만들기 (0) | 2020.07.24 |
---|---|
파이썬 OpenCV 기하학적 변환 알아보기 -1 : 확대축소 / 대칭 / 이동 / 회전 (0) | 2020.07.24 |
파이썬 OpenCV 트랙바 사용하기 (1) | 2020.07.14 |
파이썬 OpenCV 이미지 밝기 조절 : add, sub (0) | 2020.07.14 |
파이썬 OpenCV 도형 그리기 : line, rectangle, circle, polilines (0) | 2020.07.13 |