[opencv] letterbox image

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;
}

좋은 웹페이지 즐겨찾기