Notice
Recent Posts
Recent Comments
Link
WinGyu_coder
Python 으로 OpenCV, Numpy 사용. 이미지 잘라 붙여서 배치로 처리하기. 본문
개요 : 인공지능 딥러닝 모델을 사용 중 ROI로 필요한 부분만 분석할려고 하는데 분석 부분이 여러개일시 실시간 이미지 처리가 되질 않는 현상이 있었다. 필요한 부분만 잘라서 배치로 붙이고 활용할려고 한다.
이미지들을 잘라내고 이어붙여 배치로 처리하는 과정을 구현하기 위한 간단한 코드 예시를 드리겠습니다. 여기서는 Python과 OpenCV 라이브러리를 사용합니다. 이 예시는 사람의 바운딩 박스 목록(`bboxList`)을 기반으로 각각의 바운딩 박스에서 이미지를 잘라내고, 모두 같은 크기로 조정한 후, 이를 하나의 큰 이미지로 이어붙이는 과정을 보여줍니다.
예시 코드:
import cv2
import numpy as np
def crop_and_resize(image, bbox, size=(224, 224)):
"""
이미지에서 주어진 바운딩 박스로 잘라내고 지정된 크기로 조정합니다.
"""
x, y, w, h = bbox
cropped_image = image[y:y+h, x:x+w]
resized_image = cv2.resize(cropped_image, size, interpolation=cv2.INTER_LINEAR)
return resized_image
def create_batch(image, bbox_list, size=(224, 224)):
"""
여러 바운딩 박스에서 잘라낸 이미지들을 이어붙여 하나의 큰 이미지를 생성합니다.
"""
cropped_images = [crop_and_resize(image, bbox, size) for bbox in bbox_list]
batch_image = np.hstack(cropped_images) # 수평으로 이어붙이기
return batch_image
# 예시 사용
img = cv2.imread('path_to_your_image.jpg') # 이미지 로드
bboxList = [[50, 50, 100, 100], [150, 50, 100, 100]] # 예시 바운딩 박스 리스트
# 바운딩 박스에서 이미지를 잘라내고 이어붙입니다.
batch_image = create_batch(img, bboxList)
# 결과 이미지를 표시 또는 저장
cv2.imshow('Batch Image', batch_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 또는
# cv2.imwrite('batch_image.jpg', batch_image)
이 코드는 두 단계로 구성됩니다:
1. `crop_and_resize`: 주어진 바운딩 박스로 이미지를 잘라내고, 지정된 크기로 조정합니다.
2. `create_batch`: 여러 잘라낸 이미지를 수평으로 이어붙여 하나의 큰 이미지를 만듭니다.
이 코드는 간단한 예시일 뿐이므로, 실제 사용에 맞게 수정이 필요합니다. 예를 들어, 이미지의 비율 유지, 메모리 관리, 다양한 이미지 처리 요구 사항 등을 고려해야 할 수 있습니다.
'딥러닝 컴퓨터 비전' 카테고리의 다른 글
Python CUDA, cudnn.benchmark 설정 알아보기 (0) | 2024.01.29 |
---|---|
Django, API 서버로 이미지 주고 받기, OpenCV 컴퓨터 비전 (0) | 2023.12.01 |
OpenCV, 컴퓨터 비전 GPU 가속화 사용하기 (0) | 2023.11.02 |
Open CV 컴퓨터 비전 Object Detection 과 Segmentation (0) | 2023.07.22 |