上一讲是如何改变图像的分辨率和对比度,这一讲介绍一个听起来高大上的功能,图像金字塔,个人理解图像金字塔本质上也是图像大小的改变,只是改变的方式和算法有所不同。OpenCV实现了两种图像金字塔的功能,一种高斯金字塔,一种拉普拉斯金字塔。
高斯金字塔:一种用来向下缩小的图像金字塔。
拉普拉斯金字塔:一种向上来放大的图像金字塔。
OpenCV提供的图像金字塔的接口如下:
高斯金字塔:
void pyrDown( InputArray src,
OutputArray dst,
const Size& dstsize = Size(),
int borderType = BORDER_DEFAULT );
参数说明:
src: 源图像
dst: 目标图像
dstsize: 调整后的目标大小,默认成倍缩放
borderType: 边缘像素处理方式
拉普拉斯金字塔
void pyrUp( InputArray src,
OutputArray dst,
const Size& dstsize = Size(),
int borderType = BORDER_DEFAULT );
参数说明:
src: 源图像
dst: 目标图像
dstsize: 调整后的目标大小,默认成倍缩放
borderType: 边缘像素处理方式
试试这段代码,理解会更深刻
int main(int argc, char *argv[])
{
Mat src = imread("2.jpg");
Mat gsrc;
Mat gsrc1;
Mat lsrc;
Mat lsrc1;
pyrDown(src, gsrc);
pyrDown(gsrc, gsrc1);
pyrUp(src, lsrc);
pyrUp(lsrc, lsrc1);
namedWindow("src");
moveWindow("src", 0, 0);
namedWindow("gsrc");
moveWindow("gsrc", 512, 0);
namedWindow("gsrc1");
moveWindow("gsrc1", 768, 0);
namedWindow("lsrc");
moveWindow("lsrc", 0, 512);
namedWindow("lsrc1");
moveWindow("lsrc1", 512, 512);
imshow("src", src);
imshow("gsrc", gsrc);
imshow("gsrc1", gsrc1);
imshow("lsrc", lsrc);
imshow("lsrc1", lsrc1);
waitKey(0);
return 0;
}
复制
实际效果图

拉普拉斯放大后太大,此处放不下。