C++ opencv实现letterbox

代码:

#include 
#include "string"
#include "opencv2/opencv.hpp"

cv::Mat preprocess_img(cv::Mat& img, int input_w,int input_h)
{
    int w,h,x,y;
    float r_w=input_w/(img.cols*1.0);
    float r_h=input_h/(img.rows*1.0);

    if(r_h>r_w)
    {
        w=input_w;
        h=r_w*img.rows;
        x=0;
        y=(input_h-h)/2;
    }
    else
    {
        w=r_h*img.cols;
        h=input_h;
        x=(input_w-w)/2;
        y=0;
    }
    cv::Mat re(h,w,CV_8UC3);
    cv::resize(img,re,re.size(),0,0,cv::INTER_LINEAR);
    cv::Mat out(input_h,input_w,CV_8UC3,cv::Scalar(128,128,128));
    re.copyTo(out(cv::Rect(x,y,re.cols,re.rows)));
    return out;
}


int main() {
    std::string imgDir="00058.jpg";
    cv::Mat img=cv::imread(imgDir);
    cv::Mat out= preprocess_img(img,640,640);
//    cv::imshow("result",out);
//    cv::imshow("test",img);
    cv::imwrite("letterbox.jpg",out);
    std::cout << "Hello, World!" << std::endl;
    cv::waitKey(0);
    return 0;
}

结果:

C++ opencv实现letterbox_第1张图片C++ opencv实现letterbox_第2张图片

你可能感兴趣的:(c++,opencv,开发语言)