영상처리

Part 1 : OpenCV 의료 영상 처리 기초

dainj 2026. 2. 25. 13:18

1. 왜 의료 영상 처리에 OpenCV인가?

Colab 환경에서의 영상 출력

PC 환경과 달리 Colab에서는 cv2.imshow() 사용 시 에러가 발생하거나 창이 뜨지 않을 수 있다. 이를 해결하기 위해 Colab 전용 패치 모듈을 사용해야 한다.

 

[PC 환경 코드]

Python
cv2.imshow(wn+' img', t_img)
cv2.moveWindow(wn+' img', 20, 0)
cv2.waitKey(0)

 

[Colab 환경 수정 코드]

Python
from google.colab.patches import cv2_imshow
cv2_imshow(t_img)

 

2. 문자 및 사각형 등을 영상에 그리기

의료 영상에서 병변 의심 부위를 표시하거나 텍스트 정보를 입력할 때 사용하는 기본 그리기 함수들이다.

 
Python
# -*- coding: utf-8 -*-
import cv2

# 영상 읽기 (2번째 인수가 없으면 color 형으로 read)
image = cv2.imread("chest.bmp") 
color = (0, 255, 0) # green, BGR

# 1. 이미지에 문자 출력: 문자열, 위치, 크기, 색, 두께
cv2.putText(image, "test", (0, 100), cv2.FONT_HERSHEY_SIMPLEX, 1., color, 1)

# 2. 이미지에 사각형 출력: 시작위치, 종료위치, 색, 두께
cv2.rectangle(image, (100, 100), (500, 500), color, 2)

# 3. 이미지에 원 출력 : 중심위치, 반지름, 색, 두께
cv2.circle(image, (400, 400), 100, (0, 0, 255), 1)

from google.colab.patches import cv2_imshow
cv2_imshow(image)
chest.bmp 출력결과

3. 영상에 가이드라인 그리기 (Annotation)

분석하려는 특정 부위를 강조하기 위해 문자열, 사각형, 원 등을 그릴 수 있습니다.

  • 문자 출력: cv2.putText(영상, "내용", 위치, 폰트, 크기, 색상, 두께)
  • 사각형: cv2.rectangle(영상, 시작점, 종료점, 색상, 두께)
  • 원: cv2.circle(영상, 중심점, 반지름, 색상, 두께)

 

1.3 영상의 scan 값 그리기

영상의 픽셀 강도(Intensity) 변화를 그래프로 확인하여 데이터의 분포를 분석합니다.

Python
# -*- coding: utf-8 -*-
import cv2
import matplotlib.pyplot as plt
import numpy as np

# 영상을 Grayscale로 읽기
image = cv2.imread("chest.bmp", cv2.IMREAD_GRAYSCALE)
from google.colab.patches import cv2_imshow
cv2_imshow(image)

# 영상 크기 정보 가져오기
h = image.shape[0] 
w = image.shape[1]
t = np.arange(w)

# 첫 번째 scan 값 (가운데 라인 값 가져오기)
scan = image[int(h/2), :]

# 가운데 라인에서 +10 픽셀 아래 라인 값 가져오기
scan2 = image[int(h/2)+10, :]

# 그래프 출력
plt.plot(t, scan)
plt.plot(t, scan2)
plt.show()