利用warpPerspective进行图像缩放

我们知道warpPerspective能进行四边形转换,我们可以利用利用这个特点,实现一个图像缩放功能。
代码如下

void  ImgResize(const Mat srcImg, Mat &transformedImg, int dst_w, int dst_h)
{
    std::vector src(4);
    std::vector dst(4);

    src[0].x = 0;
    src[0].y = 0;

    src[1].x = srcImg.cols;
    src[1].y = 0;

    src[2].x = srcImg.cols;
    src[2].y = srcImg.rows;;

    src[3].x = 0;
    src[3].y = srcImg.rows;

    dst[0].x = 0;
    dst[0].y = 0;
    dst[1].x = dst_w;
    dst[1].y = 0;
    dst[2].x = dst_w;
    dst[2].y = dst_h;
    dst[3].x = 0;
    dst[3].y = dst_h;

    Mat transform = getPerspectiveTransform(src, dst);
    warpPerspective(srcImg, transformedImg, transform, Size(dst_w, dst_h));


}

测试代码如下:

Mat old =  imread("d:\\betty.jpg", 1/*IMREAD_GRAYSCALE*/);
    Mat resized;
    ImgResize(old, resized, old.rows*0.7, old.cols*0.7);
    namedWindow("old", 1);
    imshow("old", old);
    namedWindow("new", 1);
    imshow("new", resized);

感觉这个方式的缩放后图像效果比使用resize 的好些。
resize(old, resized, Size(old.cols, old.rows));

你可能感兴趣的:(Opencv,图像变换,缩放,resize)