返回OpenCV算子速查表
升采样 pyrDown,降采样 pyrUp,图像金字塔buildPyramid
1. 函数定义
1.1 降采样 pyrDown
OpenCV官方文档 pyrDown
void pyrDown(
InputArray src,
OutputArray dst,
const Size& dstsize = Size(),
int borderType = BORDER_DEFAULT
);
- dstsize:缺省值,输出图像的尺寸单边是源图像的一半Size((src.cols+1)/2, (src.rows+1)/2), 但是无论何种情况都必须满足以下条件:|dstsize.width ∗ 2 − src.cols| ≤ 2,|dstsize.height ∗ 2 − src.rows| ≤ 2
- 降采样的步骤:
- 先使用卷积核对源图像进行卷积;
- 然后去除所有的偶数行和列。
1.2 升采样 pyrUp
OpenCV官方文档 pyrUp
void pyrUp(
InputArray src,
OutputArray dst,
const Size& dstsize = Size(),
int borderType = BORDER_DEFAULT
);
- 该函数是升采样一幅图像,在对其进行模糊操作。
- dstsize:缺省值,输出图像的尺寸单边是源图像的两倍,Size(src.cols*2, (src.rows*2), 但是无论何种情况都必须满足以下条件:|dstsize.width − src.cols ∗ 2| ≤ (dstsize.widthmod2),|dstsize.height − src.rows ∗ 2| ≤ (dstsize.heightmod2)
- 升采样的步骤:
- 先去除偶数行和列,
- 然后用4倍于降采样卷积核对图像进行卷积。
1.3 buildPyramid
void buildPyramid(
InputArray src,
OutputArrayOfArrays dst,
int maxlevel,
int borderType = BORDER_DEFAULT
);
- 该函数为图像创建了一个高斯金字塔。
- 该函数构建了一个保存图像的容器,金字塔图像是通过递归pyrDown函数来得到的,首张图像dst[0] 就是原图。
2. 例程
#include "stdafx.h"
#include <opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main()
{
Mat m_SrcImg = imread("./flower.jpg", IMREAD_COLOR);
imshow("Source Image", m_SrcImg);
Mat m_DstImg;
pyrDown(m_SrcImg, m_DstImg, Size());
imshow("pyrDown1", m_DstImg);
pyrDown(m_DstImg, m_DstImg, Size());
imshow("pyrDown2", m_DstImg);
Mat pyrUpImg;
pyrUp(m_DstImg, pyrUpImg, Size());
imshow("pyrUp1", pyrUpImg);
pyrUp(pyrUpImg, pyrUpImg, Size());
imshow("pyrUp2", pyrUpImg);
vector<Mat> m_PyramidVec;
buildPyramid(m_SrcImg, m_PyramidVec, 3);
for (size_t i = 0; i < m_PyramidVec.size(); i++)
{
imshow("buildPyramid" + i, m_PyramidVec[i]);
}
waitKey(0);
return 0;
}