letterbox란 원래 우편함을 뜻하는 말인데, 영상처리 분야에서는 일정한 Aspect ratios 를 가지게 한다는 뜻이다.
즉, 원래의 종횡비가 원하는 종횡비가 아닐 경우 pad를 채워 넣는 방식이다.
위와 같이 다양한 해상도의 이미지를 기존의 종횡비를 깨지 않고 정방이미지(또는 원하는 종횡비) 로 변경한다.
주로 정방이미지를 입력으로 받는 Image classification 등에서 사용한다.
아래는 OpenCV로 구현한 lettterbox 코드 이다.
cv::Mat letterbox(const cv::Mat& src, uchar pad) {
int N = std::max(src.cols, src.rows);
cv::Mat dst = cv::Mat::zeros(N, N, CV_8UC(src.channels()))
+ cv::Scalar(pad, pad, pad, 0);
int dx = (N - src.cols) / 2;
int dy = (N - src.rows) / 2;
src.copyTo(dst(cv::Rect(dx, dy, src.cols, src.rows)));
return dst;
}