본문 바로가기
컴퓨터비젼

OpenCV 기능 상세 정리

by 3in9u 2025. 4. 4.

🔹 블러링 (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