Emgu CV里面,图像缩放就要用到Resize()函数,官方定义如下:
public static void Resize(
IInputArray src, // 输入图像
IOutputArray dst, // 输出图像
Size dsize, // 输出图像的尺寸,当他为空的时候,fx和fy起作用
double fx = 0.0, // 水平轴上的比例因子
double fy = 0.0, // 垂直轴上的比例因子
Inter interpolation = Inter.Linear // 插值方法,有5种,一般选Inter.Linear
)
看它的函数定义就知道, Resize()函数有两种用法,一种是指定输出图像的Size大小,一种是按照原始图像长宽比例进行缩放,下面以挨个举例,原始素材还是 lena.jpg ,其宽度和高度都是512。
1、指定输出图像的Size大小
如果想让 lena.jpg 的长宽变成960 * 640,可以这样写代码:
Mat dstMat = srcMat.Clone();
int width = 960;
int heiht = 640;
CvInvoke.Resize(dstMat, dstMat, new System.Drawing.Size(width, heiht));
CvInvoke.Imshow("Result Mat, " + dstMat.Size.ToString(), dstMat);
输出的目标图像如下,尺寸已经变成960 * 640:
2、按比例缩放
如果想让 lena.jpg 的宽度变成原来的0.75倍,高度变成原来的1.05倍,可以这样写代码:
Mat dstMat = srcMat.Clone();
double width = 0.75;
double heiht = 1.05;
CvInvoke.Resize(dstMat, dstMat, new System.Drawing.Size(), width, heiht);
CvInvoke.Imshow("Result Mat, " + dstMat.Size.ToString(), dstMat);
结果是这样的,整幅图像宽度、高度也做了相应的调整。
原创不易,请勿抄袭。共同进步,相互学习。