将图像大小调整为正方形但保持纵横比c opencv

有没有办法调整任何形状或大小的图像,以说[500×500],但保持图像的纵横比,空白空间充满白色/黑色填充物?

所以说图像是[2000×1000],在调整大小到[500×500]之后使实际图像本身为[500×250],其中任何一侧125为白色/黑色填充物.

像这样的东西:

输入

产量

编辑

我不希望简单地在方形窗口中显示图像,而是将图像更改为该状态,然后保存到文件中,创建尽可能少的图像失真的相同尺寸图像的集合.

我遇到的唯一问题是类似的问题是this post,但它在php中.

最佳答案
没有完全优化,但你可以试试这个:

编辑处理目标大小不是500×500像素并将其作为一个函数包装起来.

cv::Mat GetSquareImage( const cv::Mat& img, int target_width = 500 )
{
    int width = img.cols,
       height = img.rows;

    cv::Mat square = cv::Mat::zeros( target_width, target_width, img.type() );

    int max_dim = ( width >= height ) ? width : height;
    float scale = ( ( float ) target_width ) / max_dim;
    cv::Rect roi;
    if ( width >= height )
    {
        roi.width = target_width;
        roi.x = 0;
        roi.height = height * scale;
        roi.y = ( target_width - roi.height ) / 2;
    }
    else
    {
        roi.y = 0;
        roi.height = target_width;
        roi.width = width * scale;
        roi.x = ( target_width - roi.width ) / 2;
    }

    cv::resize( img, square( roi ), roi.size() );

    return square;
}

转载注明原文:将图像大小调整为正方形但保持纵横比c opencv - 代码日志