上一講是如何改變圖像的分辨率和對比度,這一講介紹一個聽起來高大上的功能,圖像金字塔,個人了解圖像金字塔本質上也是圖像大小的改變,隻是改變的方式和算法有所不同。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;
}
複制
實際效果圖

拉普拉斯放大後太大,此處放不下。