天天看点

"大脑"生长系列(六)

上一讲是如何改变图像的分辨率和对比度,这一讲介绍一个听起来高大上的功能,图像金字塔,个人理解图像金字塔本质上也是图像大小的改变,只是改变的方式和算法有所不同。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;
}           

复制

实际效果图

"大脑"生长系列(六)

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