这篇文章主要介绍了OpenCV如何如何图像金字塔,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
目录
高斯金字塔
拉普拉斯金字塔
本文主要介绍了OpenCV 图像金字塔,具有一定的参考价值,感兴趣的可以了解一下
高斯金字塔reduce | void cv::pyrDown() |
expand | void cv::pyrUp() |
1.高斯金字塔
图像金字塔是对一张输入图像先模糊再下采样为原来的高、宽的1/2,不断重复模糊与下采样的过程就得到了不同分辨率的输出图像,叠加在一起就形成了图像金字塔。
高斯金字塔便是先进行高斯模糊,再进行reduce和expand操作。高斯金字塔中的较高级别(低分辨率)是通过删除较低级别(较高分辨率)图像中的连续行和列而形成的。然后,较高级别的每个像素由基础级别的5个像素的贡献与高斯权重形成。通过这样做,M×N图像变成M/2×N/2图像。因此面积减少到原始面积的四分之一。它称为Octave。
cv::pryDown()
C++ void cv::pyrDown(cv::InputArray src, cv::OutputArray dst, const cv::Size &dstsize = cv::Size(), int borderType = 4)
cv::pryUp()
C++ void cv::pyrUp(cv::InputArray src, cv::OutputArray dst, const cv::Size &dstsize = cv::Size(), int borderType = 4)
2.拉普拉斯金字塔
在高斯金字塔的运算过程中,图像经过卷积和下采样操作会丢失部分高频细节信息。为描述这些高频信息,人们定义了拉普拉斯金字塔(Laplacian Pyramid, LP)。用高斯金字塔的每一层图像减去其上一层图像上采样并高斯卷积之后的预测图像,得到一系列的差值图像即为 LP 分解图像。首先要进行金字塔的reduce操作,再expand操作,最后相减得到拉普拉斯金字塔。 L=G-expand(reduce(G))
代码1:
#include<opencv2/opencv.hpp>#include<iostream>#include<imgproc.hpp>using namespace cv;using namespace std; int main(int argc, char** argv) {Mat image = imread("C:/Users/YY/Pictures/Saved Pictures/1.jpg");Mat out;imshow("原图", image);pyrDown(image, out);imshow("降采样", out);pyrUp(out, out);imshow("上采样", out);subtract(image, out, out);imshow("拉普拉斯金字塔", out);waitKey(0);destroyAllWindows();return 0;}
感谢你能够认真阅读完这篇文章,希望小编分享的“OpenCV如何如何图像金字塔”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!