PyTorch C++ APIを使ってcenterCropをしたい

torchvisionで実装されているcenterCropをC++(OpenCV)で再現する方法です。

torchvisionで使われているcenterCropの実装を見れば終わりなんですが、そこまでしたくない人のために実装例を載せます。

cv::Mat img_float; // cropしたい画像(float値)
cv::Mat img_cropped; // crop後の画像
int crop_w, crop_h; // crop後の横幅・縦の長さ
// paddingが必要な場合の前処理
if(crop_w > image_float.cols || crop_h > image_float.rows)
{
    const int left = crop_w > image_float.cols ? (crop_w - image_float.cols) / 2 : 0;
    const int top = crop_h > image_float.rows ? (crop_h - image_float.rows) / 2 : 0;
    const int right = crop_w > image_float.cols ? (crop_w - image_float.cols + 1) / 2 : 0;
    const int bottom = crop_h > image_float.rows ? (crop_h - image_float.rows + 1) / 2 : 0;
    cv::copyMakeBorder(image_float, image_float, top, bottom, left, right, cv::BORDER_CONSTANT, cv::Scalar(0));
}
// center crop
const int new_width = (image_float.cols - crop_w) / 2;
const int new_height = (image_float.rows - crop_h) / 2;
cv::Rect roi(new_width, new_height, crop_w, crop_h);
img_cropped = image_float(roi).clone();

以下のサイトを参考にしました。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。

CAPTCHA