🔹 블러링 (Blurring)
이미지에서 노이즈를 제거하거나, 부드러운 효과를 주기 위해 사용
✅ 가우시안 블러 (Gaussian Blur)
- 특징: 가우시안 분포 커널을 사용
- 효과: 노이즈 제거, 부드러운 흐림 효과, 가장자리 보존
- 활용 예시:
- 얼굴 모자이크 처리
- 영상의 노이즈 감소
- 엣지 검출 전 전처리
blurred = cv2.GaussianBlur(img, (5, 5), 0)
🔹 샤프닝 필터 (Sharpening Filter)
경계를 더 뚜렷하게 하고 이미지의 선명도를 높임
✅ 특징
- 중심 픽셀 강조, 주변 픽셀 감쇠
- 경계(edge) 검출과 조합해 시각적 선명도 향상
kernel = np.array([[0, -1, 0],
[-1, 5,-1],
[0, -1, 0]])
sharpened = cv2.filter2D(img, -1, kernel)
🔹 기하학 변환 (Geometric Transforms)
✅ Affine Transform (아핀 변환)
- 점 3개를 기준으로 회전, 이동, 확대/축소, 기울이기(shearing) 수행
- 직선 유지, 평행선 유지
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(img, M, (cols, rows))
✅ Shearing (기울이기 변환)
- 이미지의 형태를 기울이게 만들어 왜곡 효과 부여
- Affine 변환에 포함됨
✅ Warping (투영 변환, Perspective Transform)
- 점 4개를 기준으로 원근 감 있는 변형 수행
- 직사각형 → 사다리꼴 가능 (투시 왜곡)
M = cv2.getPerspectiveTransform(pts1, pts2)
warped = cv2.warpPerspective(img, M, (width, height))
🔹 Interpolation (보간법)
이미지를 확대/축소할 때 픽셀 사이의 값을 새롭게 계산하는 기법
방법특징
| Nearest Neighbor | 가장 빠르나 화질이 낮음 |
| Bilinear (양선형) | 4개 픽셀 평균, 균형 있는 품질 |
| Bicubic (쌍삼차) | 16개 픽셀 고려, 가장 자연스러움 |
✅ Bilinear 예시:
resized = cv2.resize(img, (w, h), interpolation=cv2.INTER_LINEAR)
🔹 엣지 검출 (Edge Detection)
✅ Sobel Filter (소벨 필터)
- X축, Y축 방향 밝기 차이를 계산 → 경계 검출
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0)
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1)
✅ Canny Edge (캐니 엣지 검출)
- 가장 정교한 엣지 검출 알고리즘
- 단계: 노이즈 제거 → 그래디언트 계산 → 비최대 억제 → 이중 임계값
edges = cv2.Canny(img, 100, 200)
🔹 Hough Transform (허프 변환)
엣지 이미지에서 직선, 원 같은 도형 검출
✅ 특징
- 누적 공간(voting space) 사용
- 특정 형상의 패턴을 집중적으로 검출
lines = cv2.HoughLines(edges, 1, np.pi / 180, threshold=150)
🔹 배경 제거 및 모션 감지
✅ 이동 평균 배경 차분 (Moving Average Background Subtraction)
- 각 프레임의 평균을 업데이트하며 움직임이 있는 객체 검출
- 영상에서 움직이는 물체만 추출할 수 있음
# OpenCV의 BackgroundSubtractorMOG2 활용
fgbg = cv2.createBackgroundSubtractorMOG2()
fgmask = fgbg.apply(frame)
🔍 실전 예시: 얼굴 모자이크 + 엣지 검출 전처리
import cv2
img = cv2.imread('face.jpg')
blurred = cv2.GaussianBlur(img, (15, 15), 0)
edges = cv2.Canny(blurred, 100, 200)
cv2.imshow("Blurred", blurred)
cv2.imshow("Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
'컴퓨터비젼' 카테고리의 다른 글
| NeRF (Neural Radiance Fields) (0) | 2025.04.04 |
|---|---|
| 객체 추적(Object Tracking) (0) | 2025.04.04 |
| OpenCV란? (0) | 2025.04.04 |
| 객체 검출 (Object Detection) (0) | 2025.03.27 |
| 영상의 미분 (Image Derivative) (0) | 2025.03.21 |