본문 바로가기
Data Science & AI/Computer Vision

[OpenCV] Image Crop

by 삼SAM 2024. 1. 1.

OpenCV Python 명령어로 이미지 잘라내기

[목차]

  • Python 코드
  • 내용 설명
    • 이미지 데이터 구조
    • 이미지 자르기(Crop) 예시

 

Python 코드

import cv2

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

# 이미지 자르기
# image[y좌표 시작 지점: y좌표 종료 지점, x좌표 시작 지점: x좌표 종료 지점]
# 잘라낼 이미지 좌측 상단 xy좌표가 (2, 1), 우측 하단 xy좌표가 (17, 14)인 경우
cropped_image = image[1:14, 2:17]

 

내용 설명

이미지 데이터 구조

import cv2

image = cv2.imread('이미지 경로')

위 예시 코드를 실행하면 해당 이미지가 image라는 변수에 저장되며 이때, image는 "numpy.ndarray" 형식이다.

예시 이미지
예시 이미지

해당 이미지가 위와 같이 가로 19 픽셀, 세로 15 픽셀을 가진 이미지라고 한다면 각 픽셀마다 자신의 색상 정보를 BGR 3채널로 가지고 있다.

 

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

실제 화면에 출력할 때는 RGB 순으로 표기해야 하므로 위와 같이 채널 순서를 변경해주어야 한다.

이렇게 변경된 값은 아래와 같다.

[[[0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [255,0,0], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [255,0,0], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255]],
 [[0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255], [0,0,255]]]

 

즉, 해당 이미지 데이터는 각 픽셀 좌표에 대응하는 NDArray 위치에 색상 정보 담고 있으며 이를 시각화하여 표현하면 아래와 같다.

 

예시 이미지

 

이미지 자르기(Crop) 예시

이미지에서 자르고자 하는 영역의 좌표값을 이용하여 NDArray형태에서 슬라이싱을 하여 이미지를 잘라낼 수 있다.

 

imgae[y좌표 시작 지점: y좌표 종료 지점, x좌표 시작 지점: x좌표 종료 지점]

 

 

[예시 1]

image[0:5, 0:5]

 

 

[예시 2]

image[1:14, 2:17]

 


 

댓글