[파이썬] opencv-python 이미지 슬라이싱 및 분할

이미지 처리 시에 이미지를 잘라내거나, 분할하여 작은 부분 이미지로 처리하는 작업은 매우 일반적입니다. OpenCV-Python 패키지를 사용하여 이미지를 슬라이싱하고 분할하는 방법을 소개합니다.

이미지 슬라이싱

이미지 슬라이싱은 이미지의 일부 영역을 선택하기 위해 사용됩니다. 슬라이싱은 이미지의 특정 영역을 표현하는 사각형의 좌표를 정의하는 것으로 이루어집니다.

import cv2

# 이미지 불러오기
image = cv2.imread('image.jpg')

# 슬라이싱할 영역의 좌표 설정
x = 100
y = 100
width = 200
height = 200

# 이미지 슬라이싱
sliced_image = image[y:y+height, x:x+width]

# 슬라이스된 이미지 출력
cv2.imshow('Sliced Image', sliced_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

위 코드에서, x, y, width, height 변수는 슬라이싱할 영역의 좌표를 설정하는 데 사용됩니다. xy는 슬라이싱할 영역의 좌상단 좌표를 나타내고, widthheight는 사각형 영역의 폭과 높이를 나타냅니다. 슬라이싱된 이미지는 image[y:y+height, x:x+width]로 얻을 수 있습니다.

이미지 분할

이미지 분할은 이미지를 작은 부분 이미지로 나누는 작업입니다. 이미지 분할을 사용하여 이미지를 작은 조각으로 나눌 수 있습니다. 이를 통해 이미지 처리 작업을 더욱 효율적으로 수행할 수 있습니다.

import cv2

# 이미지 불러오기
image = cv2.imread('image.jpg')

# 이미지 분할할 영역 설정
height, width, _ = image.shape
num_rows = 3
num_cols = 3

# 이미지 분할
partitioned_images = []
for r in range(num_rows):
    for c in range(num_cols):
        x = int(c * (width / num_cols))
        y = int(r * (height / num_rows))
        w = int(width / num_cols)
        h = int(height / num_rows)
        
        partition = image[y:y+h, x:x+w]
        partitioned_images.append(partition)

# 분할된 이미지 출력
for i, partition in enumerate(partitioned_images):
    cv2.imshow(f'Partition {i+1}', partition)
cv2.waitKey(0)
cv2.destroyAllWindows()

위 코드에서, num_rowsnum_cols 변수는 이미지를 분할할 행과 열의 수를 나타냅니다. 분할된 이미지는 partitioned_images 배열에 저장됩니다. 각 분할은 사각형 영역의 좌표를 정의하여 얻을 수 있습니다.


이렇게 OpenCV-Python을 사용하여 이미지를 슬라이싱하고 분할할 수 있습니다. 이미지 슬라이싱을 통해 특정 영역을 선택하고, 이미지 분할을 통해 이미지를 작은 부분으로 나누어 처리할 수 있습니다. 이러한 기능을 활용하면 다양한 이미지 처리 작업에서 유용하게 사용할 수 있습니다.

이미지 출처: Unsplash