我们知道warpPerspective能进行四边形转换,我们可以利用利用这个特点,实现一个图像缩放功能。
代码如下
void ImgResize(const Mat srcImg, Mat &transformedImg, int dst_w, int dst_h)
{
std::vector<Point2f> src(4);
std::vector<Point2f> 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));