영상처리

Part 2 : Numpy Indexing을 이용한 영상 생성

dainj 2026. 2. 25. 13:25

Numpy의 인덱싱 기능을 활용하면 영상의 특정 영역에 원하는 값을 대입하여 인공적인 영상을 생성할 수 있다. 이는 의료 영상 처리에서 마스크(Mask)를 만들거나 특정 관심 영역(ROI)을 설정할 때 필수적인 기술이다.

 

1. 가로/세로 그라데이션 영상 만들기

np.zeros를 통해 빈 영상을 생성한 후, 행과 열의 범위를 지정하여 서로 다른 밝기 값을 입력한다.

 

[실습 코드: 가로 및 세로 단계별 영상 생성]

Python
import cv2
import numpy as np
from google.colab.patches import cv2_imshow

w, h = 512, 512
image = np.zeros(shape=(h, w), dtype=np.uint8)
img = np.zeros(shape=(h, w), dtype=np.uint8)

# 가로 방향 단계별 밝기 설정
image[0:129] = 240
image[129:255] = 200
image[255:383] = 100
image[383:512] = 0
cv2_imshow(image)

# 세로 방향 단계별 밝기 설정
img[:, 0:129] = 240
img[:, 129:255] = 200
img[:, 255:383] = 100
img[:, 383:512] = 0
cv2_imshow(img)

 

2. 복합 패턴 영상 및 테두리 설정

인덱싱의 슬라이싱 기능을 활용하면 체스판 형태의 패턴이나 영상의 테두리(Border)를 손쉽게 그릴 수 있다.

 

[실습 코드: 사분면 패턴 및 테두리 생성]

Python
import cv2
import numpy as np
from google.colab.patches import cv2_imshow

w, h = 512, 512
image = np.zeros(shape=(h, w), dtype=np.uint8)

# 각 사분면별 기본 밝기 설정
image[0:255, 0:255] = 70
image[255:512, 0:255] = 200
image[0:255, 255:512] = 130
image[255:512, 255:512] = 240

# 특정 간격(Step)을 이용한 점 패턴 생성
image[0:255:5, 0:255:5] = 250
image[255:512:5, 255:512:5] = 0

# 영상의 테두리를 특정 값으로 설정
image[:10, :] = image[502:, :] = image[:, :10] = image[:, 502:] = 160

cv2_imshow(image)

 


3. 의료 영상 정보 표시 (Graphic Annotation)

numpy.shape를 통해 얻은 영상의 구조 정보를 영상 위에 직접 텍스트로 출력하여 데이터 정보를 시각화한다.

 

[실습 코드: 영상 정보 출력하기]

Python
import cv2

# 의료 영상 데이터 읽기
image = cv2.imread("/content/drive/MyDrive/의료 상대이타/chest.bmp") # 2번째 인수가 없으면 color 형으로 read

color = (0, 255, 0) # green, BGR
color1 = (0, 255, 255) # yellow, BGR

# 이미지에 문자 출력 : 문자열, 위치, 크기, 색, 두께
cv2.putText(image, "Bin Th: 128", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 1)
cv2.putText(image, "image width 512", (20, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 1)
cv2.putText(image, "image height 512", (20, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 1)
cv2.putText(image, "image bytes/pixel 3", (20, 100), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 1)

# 이미지에 사각형 출력: 시작위치, 종료위치, 색, 두께
cv2.rectangle(image, (10, 10), (330, 120), color1, 1)

from google.colab.patches import cv2_imshow
cv2_imshow(image)