→ 바깥 가상의 픽셀값 어떻게 설정하느냐에 따라 연산 결과 달라짐
ddepth = -1 : 입력 영상과 같게 설정
emboss = np.array([[-1, -1, 0],
[-1, 0, 1],
[0, 1, 1]], np.float32)
dst = cv2.filter2D(src, -1, emboss, delta = 128)
특정 픽셀과 주변 픽셀들의 산술 평균으로 설정
(행렬의 전체 원소의 합) / (행렬의 전체 원소 개수)
마스크의 크기 증가
blur(src, dst, ksize, anchor = Point(-1, -1), borderType = BORDER_DEFAULT);
블러링 효과 강하게 하고 싶으면 ksize를 증가
ksize 킈의 평균값 필터 마스크 사용하여 dst 출력 영상 생성
dst = cv2.blur(src, (ksize, ksize))
가우시안 분포를 따르는 2차원 필터 마스크 행렬 생성
가우시안 분포 함수 : 연속 함수 → 이산형의 마스크 생성
-4a ~ 4a 사이 구간에서 대부분의 값이 존재
2차원 가우시안 분포 함수 : 1차원 가우시안 분포 함수의 곱으로 분리 가능
→ x축 방향, y축 방향의 함수로 각각 분리
GaussianBlur(src,dst, ksize, sigmaX, sigmaY = 0, borderType = BORDER_DEFAULT)
표준편차 커질수록 영상 부드럽
for sigma in range(1, 6):
dst = cv2.GaussianBlur(src, (0, 0), sigma)
내부적으로 x축 방향, y축 방향 1차원 가우시안 필터 마스크 각각 생성
1차 가우시안 필터 마스크 생성 : getGaussianKernel()
ksize : (8*sigma + 1)보다 같거나 크게 지정
각 행렬의 원소에 저장되는 값
→ a : Weight들의 합 = 1 이 되게 만드는 상수
g(x,y) 에 가중치 곱해서 샤프닝 정도 변경 가능
가중치 < 1.0 : 덜 날카로운 영상
가중치 = 1.0 : 날카로운 성분 그대로 한 번 더하는 것
OpenCV에서 제공 X → 직접 구현 필요
블러링 : 평균값 필터, 가우시안 필터 사용
→ 표준 편차 커지면 더 넓은 영역 변경
blurred = cv2.GaussianBlur(src, (0, 0), 6)
alpha = 1.0
dst = cv2.addWeighted(src, 1 + alpha, blurred, -alpha, 0.0)
cv2.imshow('dst', dst)
noise = np.zeros(src.shape, np.int32)
cv2.randn(noise, 0, 100)
dst = cv2.add(src, noise, dtype=cv2.CV_8UC1)
dst1 = cv2.GaussianBlur(src, (0, 0), 5) # src: 잡음 추가된 영상
dst2 = cv2.bilateralFilter(src, -1, 10, 5)
ksize : 3보다 같거나 큰 홀수 지정
for i in range(0, int(src.size/10)): # 소금후추 뿌리기
x = random.randint(0, src.shape[1]-1)
y = random.randint(0, src.shape[0]-1)
src[x,y] = (i%2) * 255
dst2 = cv2.medianBlur(src, 3)