- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
对图像进行上采样并随后进行模糊处理。
默认情况下,输出图像的大小计算为 Size(src.cols2, src.rows2),但无论如何,以下条件必须得到满足:
∣
dstsize.width
−
s
r
c
.
c
o
l
s
∗
2
∣
≤
(
dstsize.width
m
o
d
2
)
∣
dstsize.height
−
s
r
c
.
r
o
w
s
∗
2
∣
≤
(
dstsize.height
m
o
d
2
)
\begin{array}{l} | \texttt{dstsize.width} -src.cols*2| \leq ( \texttt{dstsize.width} \mod 2) \\ | \texttt{dstsize.height} -src.rows*2| \leq ( \texttt{dstsize.height} \mod 2) \end{array}
∣dstsize.width−src.cols∗2∣≤(dstsize.widthmod2)∣dstsize.height−src.rows∗2∣≤(dstsize.heightmod2)
该函数执行高斯金字塔构建中的上采样步骤,尽管它实际上也可以用来构建拉普拉斯金字塔。首先,它通过插入偶数行和列来对源图像进行上采样,然后使用与 pyrDown
函数相同的核乘以 4 进行卷积。
pyrUp() 函数是 OpenCV 中用于图像金字塔处理的一个函数,主要用于图像上采样,即将图像放大到较大的分辨率。它是构建图像金字塔的另一个基础步骤之一,通常与 pyrDown() 函数配合使用,用于图像金字塔的构建和处理。
函数原型
void cv::pyrUp
(
InputArray src,
OutputArray dst,
const Size & dstsize = Size(),
int borderType = BORDER_DEFAULT
)
参数
- 参数src 输入图像。
- 参数dst 输出图像;与输入图像具有相同的类型。
- 参数dstsize 输出图像的大小。
- 参数borderType 像素外推方法,参见 BorderTypes(仅支持 BORDER_DEFAULT)。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
// 加载图像
cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_COLOR );
if ( img.empty() )
{
std::cout << "无法加载图像,请检查路径是否正确。" << std::endl;
return -1;
}
cv::Size sz2Sh( 400, 600 );
cv::resize( img, img, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );
// 使用 pyrUp 对图像进行上采样
cv::Mat larger_img;
cv::Size dst_size( img.cols * 2, img.rows * 2 ); // 明确指定输出图像的大小
cv::pyrUp( img, larger_img, dst_size );
// 显示结果
cv::namedWindow( "Original Image", cv::WINDOW_NORMAL );
cv::imshow( "Original Image", img );
cv::namedWindow( "Upsampled Image", cv::WINDOW_NORMAL );
cv::imshow( "Upsampled Image", larger_img );
cv::waitKey( 0 ); // 等待按键
return 0;
}