반응형
위에서 설정한 환경에서 다음 python 에제 프로그램을 구동한다.
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(dir, 'image.jpg')
# 이미지 불러오기
image_color = cv2.imread(file_path, cv2.IMREAD_COLOR) # 컬러 표시용
image = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE) # 크레이스케일 연산용(에지 검출은 보통 단일 채널에서 수행)
# Sobel 필터 적용
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3) # 수평 방향 -> 수평 에지가 밝게 나타남
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3) # 수직 방향 -> 수직 에지가 밝게 나타남
# 기울기 크기 계산
sobel_magnitude = cv2.magnitude(sobel_x, sobel_y) # 에지의 세기
# 결과 시각화
plt.figure(figsize=(15, 8))
# 원본 이미지
plt.subplot(1, 4, 1)
plt.imshow(cv2.cvtColor(image_color, cv2.COLOR_BGR2RGB))
plt.title('Original Image (Color)')
plt.axis('off')
# Sobel X
plt.subplot(1, 4, 2)
plt.imshow(sobel_x, cmap='gray')
plt.title('Sobel X')
plt.axis('off')
# Sobel Y
plt.subplot(1, 4, 3)
plt.imshow(sobel_y, cmap='gray')
plt.title('Sobel Y')
plt.axis('off')
# Gradient Magnitude
plt.subplot(1, 4, 4)
plt.imshow(sobel_magnitude, cmap='gray')
plt.title('Gradient Magnitude')
plt.axis('off')
plt.tight_layout()
plt.show()
이것을 위 가상환경에서 실행하기 위해서는 matplotlib가 추가로 설치되어야 한다. 따라서 다음과 같은 절차를 사용하여 matplotlib를 설치한다.
$ pip install matplotlib
# 설치 확인
$ python -c "import matplotlib; print(matplotlib.__version__)"
[sobel.py 실행]
$ python sobel.py
한 장의 이미지를 불러와서 Sobel 미분으로 수평/수직 에지를 구한 뒤, 두 방향을 합친 "기울기 크기(gradient magnitude)"까지 4분할 화면으로 시각화하는 간단, 정석 파이프라인이다.
스크립트와 같은 폴더의 image.jpg를 읽어 오고, Sobel X(가로 변화), Sobel Y(세로 변화), √(X²+Y²) 크기를 계산해 한 화면에 보여준다.

- Sobel X : 세로 경계가 강조됨
- Sobel Y : 가로 경계가 강조됨
- Magnitude : 방향과 관계없이 "강한 변화"를 한 장에 모아 보여준다. (후 처리나 에지 기반 특징 추출의 입력으로 쓰기 좋음)
반응형
'라즈베리파이' 카테고리의 다른 글
| harris.py (0) | 2025.09.20 |
|---|---|
| laplacian.py (0) | 2025.09.20 |
| mediapip.py (0) | 2025.09.19 |
| point_mediapipe.py (0) | 2025.09.19 |
| 라즈베리파이 5에서 tensorflow가 설치된 opencv 개발환경 설정 (0) | 2025.09.19 |



