반응형
💡 Image padding 은 이미지의 주변을 검게 혹은 원하는 색으로 주변을 둘러싸는 것을 의미한다.
object detection을 하다보면 이미지의 크기를 맞추어주는 등의 이유로 image padding을 해야하는 경우가 생긴다.
본 포스팅에서는 cv2 라이브러리를 활용하여 image padding하는 여러가지 방법에 대해서 다룬다.
1. cv2.copyMakeBorder
import cv2
path = '/이미지 경로/img.jpg'
image = cv2.imread(path)
#이미지 padding
image = cv2.copyMakeBorder(image,10,10,10,10,cv2.BORDER_CONSTANT,None,value=0)
img2 = cv2.copyMakeBorder(img, 50,50,50,50, borderType=cv2.BORDER_CONSTANT, value=(255,255,255,0))
- cv2.copyMakeBorder 함수는 다음과 같은 parameter을 차례로 갖는다.
- src : 이미지
- top : top에 padding을 원하는 픽셀수
- bottom : bottom에 padding을 원하는 픽셀수
- left: left 에 padding을 원하는 픽셀수
- right : right 에 padding을 원하는 픽셀수
- border type : padding 의 종류이다. 아래 예시 중류 중 골라서 border을 사용하면 된다.
- cv2.BORDER_CONSTANT : 하나의 색으로 padding
- cv2.BORDER_REFLECT : 이미지를 반복해서 padding
- dest : 이미지의 destimation
- value : BORDER_CONSTANT인 경우 색
2. 새로운 black canvas 에 padding하고자 한 이미지를 append 하는 방법
import numpy as np
# Create a larger black colored canvas
canvas = np.zeros(512, 512, 3)
canvas[6:506, 6:506] = your_500_500_img
- 원본 이미지 보다 더 큰 이미지를 만들어서 이미지 내부에 padding 하고 싶은 이미지를 넣는 방식이다.
- canvas 가 큰 이미지에 해당
- 사이에 your image를 넣은 것을 확인할 수 있다.
3. numpy의 pad 함수를 활용한 방법
import cv2
import numpy as np
img = cv2.imread("input.jpg")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
resized_digit = cv2.resize(gry, (18, 18))
padded_digit = np.pad(resized_digit, ((5, 5), (5, 5)), "constant", constant_values=0)
cv2.imshow("padded_digit", padded_digit)
cv2.waitKey(0)
반응형
'AI Research > Object Detection' 카테고리의 다른 글
[Object Detection] MMdetection으로 RPN 실행하기 (0) | 2023.04.08 |
---|---|
[Object Detection] Yolov5 dataloaders.py 코드 분석 (0) | 2023.04.08 |
[Object Detection] 오픈소스로 detection 결과 mAP 측정하기 (0) | 2023.01.13 |
[Object Detection] mmdetection의 input image size 변경하는 방법 (Faster r-cnn) (0) | 2022.12.28 |
[Object Detection] YOLOv5로 multi stream, multi camera object detection하는 법/ 동시에 여러 video detection 진행하기 (3) | 2022.08.08 |