[OpenCV] Basic 9 - 이미지 경계선 검출 (Edge Detection)
경계선 검출(Edge Detection)은 이미지에서 물체의 윤곽선을 찾아내는 방법입니다. 이미지 내에서 밝기가 급격히 변하는 부분을 탐지하여 객체의 형태를 추출할 수 있습니다. OpenCV에서는 여러 가지 경계선 검출 기법을 제공합니다. 대표적으로 Canny Edge Detection과 Sobel Filter가 많이 사용됩니다.
Import packages
import cv2 import numpy as np import matplotlib.pyplot as plt
Function to Display Images in Jupyter Notebook
Jupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.
def img_show(title='image', img=None, figsize=(8, 5)): plt.figure(figsize=figsize) if type(img) == list: titles = title if type(title) == list else [title] * len(img) for i in range(len(img)): rgbImg = cv2.cvtColor(img[i], cv2.COLOR_GRAY2RGB) if len(img[i].shape) <= 2 else cv2.cvtColor(img[i], cv2.COLOR_BGR2RGB) plt.subplot(1, len(img), i + 1) plt.imshow(rgbImg) plt.title(titles[i]) plt.xticks([]), plt.yticks([]) plt.show() else: rgbImg = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) if len(img.shape) < 3 else cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(rgbImg) plt.title(title) plt.xticks([]), plt.yticks([]) plt.show()
Load Image
이미지를 불러옵니다.
cv2_image = cv2.imread('asset/images/test_image.jpg', cv2.IMREAD_COLOR) gray_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2GRAY)
1. Canny Edge Detection
Canny Edge Detection은 가장 널리 사용되는 경계선 검출 기법 중 하나로, 이미지의 노이즈 제거 후 경계선을 찾아냅니다. threshold1
과 threshold2
값에 따라 검출된 경계선의 민감도가 달라집니다.
canny_edges = cv2.Canny(gray_image, 100, 200) img_show("Canny Edge Detection", canny_edges)

2. Sobel Filter
Sobel Filter는 이미지의 밝기 변화 방향을 계산하여 경계선을 검출하는 기법입니다. X축과 Y축 각각에 대해 경계선을 검출한 후, 합성하여 전체 경계선을 생성합니다.
- Sobel X: X축 방향의 경계선 검출
- Sobel Y: Y축 방향의 경계선 검출
sobel_x = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=3) sobel_y = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=3) sobel_x = cv2.convertScaleAbs(sobel_x) sobel_y = cv2.convertScaleAbs(sobel_y) sobel_edges = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0) img_show(["Sobel X", "Sobel Y", "Sobel Magnitude"], [sobel_x, sobel_y, sobel_edges])

3. Laplacian Edge Detection
Laplacian 필터는 이미지에서 고차 미분을 사용하여 경계선을 검출합니다. Sobel Filter보다 더 날카로운 경계선을 생성할 수 있습니다.
laplacian_edges = cv2.Laplacian(gray_image, cv2.CV_64F) laplacian_edges = cv2.convertScaleAbs(laplacian_edges) # 8-bit로 변환 img_show("Laplacian Edge Detection", laplacian_edges)

4. Combined Edge Detection
Canny, Sobel, Laplacian 등을 조합하여 복합적인 경계선 검출을 할 수 있습니다. 예를 들어, Sobel 필터로 X, Y 방향을 각각 검출하고, Canny Edge로 최종 경계선을 강조할 수 있습니다.
combined_edges = cv2.Canny(cv2.convertScaleAbs(sobel_edges), 50, 150) img_show("Combined Edge Detection", combined_edges)

위와 같이 OpenCV를 사용하여 다양한 방법으로 경계선을 검출할 수 있습니다. 각 방법은 고유의 특성이 있으므로, 이미지의 특징과 목표에 따라 적절한 기법을 선택하는 것이 좋습니다.
'Tech & Development > Image Processing' 카테고리의 다른 글
[OpenCV] Basic 11 - 이미지 히스토그램 (Histogram) 분석 (0) | 2024.11.19 |
---|---|
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion) (1) | 2024.11.16 |
[OpenCV] Basic 8 - 이미지 블러 처리 (Blur) (0) | 2024.11.14 |
[ OpenCV ] Basic 7 - 이미지 자르기 (Crop) (0) | 2022.11.21 |
[ OpenCV ] Basic 6 - 이미지 크기조정 (Resize) (0) | 2022.03.02 |
댓글
이 글 공유하기
다른 글
-
[OpenCV] Basic 11 - 이미지 히스토그램 (Histogram) 분석
[OpenCV] Basic 11 - 이미지 히스토그램 (Histogram) 분석
2024.11.19이미지 히스토그램은 이미지에서 색상 분포나 밝기 정보를 시각적으로 표현한 그래프입니다. 히스토그램을 분석하면 이미지의 명도, 대비, 색상 정보를 알 수 있어 이미지 처리에서 중요한 역할을 합니다. 예를 들어, 히스토그램을 사용해 이미지의 밝기나 대비를 조정할 수 있습니다.Import packagesimport cv2import numpy as npimport matplotlib.pyplot as pltFunction to Display Images in Jupyter NotebookJupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.def img_show(title='image', img=None, figsize=(8, 5)): pl… -
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion)
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion)
2024.11.16이미지 색상 변환은 이미지를 다양한 색상 공간으로 변환하여 처리할 수 있도록 하는 작업입니다. OpenCV에서는 여러 색상 공간(BGR, RGB, Grayscale, HSV, Lab 등)을 지원하며, 상황에 따라 적절한 색상 공간을 선택해 이미지 분석이나 필터링 작업을 수행할 수 있습니다. 특히 색상 공간 변환은 색상 추출, 객체 탐지, 이미지 분할 등에 유용합니다.Import packagesimport cv2import matplotlib.pyplot as pltFunction to Display Images in Jupyter NotebookJupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.def img_show(title='imag… -
[OpenCV] Basic 8 - 이미지 블러 처리 (Blur)
[OpenCV] Basic 8 - 이미지 블러 처리 (Blur)
2024.11.14Blur(블러)는 이미지를 부드럽게 만들어주는 필터로, 노이즈를 제거하거나 이미지의 중요한 부분을 강조할 때 사용합니다. 예를 들어, 사진에서 배경을 부드럽게 처리하여 피사체에 집중하게 만들고 싶을 때 유용합니다. OpenCV에서는 다양한 블러 방법을 제공합니다.Import packagesimport cv2import numpy as npimport matplotlib.pyplot as pltFunction to Display Images in Jupyter NotebookJupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.def img_show(title='image', img=None, figsize=(8, 5)): plt.fig… -
[ OpenCV ] Basic 7 - 이미지 자르기 (Crop)
[ OpenCV ] Basic 7 - 이미지 자르기 (Crop)
2022.11.21Image Crop Crop은 이미지에서 필요한 이미지의 일부만 잘라내기 위해 사용합니다. 예를들어, 이미지에서 얼굴 영역만 찾아 잘라내는 기능을 개발한다면 Crop을 통해 잘라낼 수 있습니다. Import packages import cv2 import imutils import matplotlib.pyplot as plt Jupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의 def img_show(title='image', img=None, figsize=(8 ,5)): plt.figure(figsize=figsize) if type(img) == list: if type(title) == list: titles = title else: ti…
댓글을 사용할 수 없습니다.