Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm

在OpenCV中,使用函数cv2.pyrUp()实现图像金字塔操作中的向上采样,其语法形式如下:

dst = cv2.pyrUp( src[, dstsize[, borderType]] )

其中:
● dst为目标图像。
● src为原始图像。
● dstsize为目标图像的大小。
● borderType为边界类型,默认值为BORDER_DEFAULT,且这里仅支持BORDER_DEFAULT。
默认情况下,目标图像的大小为Size(src.cols2, src.rows2)。在任何情况下,图像尺寸需要满足下列条件:

|dst. width - src. cols∗2|≤mod(dst. widh,2)
|dst. height - src. rows∗2|≤mod(dst.height,2)

对图像向上采样时,在每个像素的右侧、下方分别插入零值列和零值行,得到一个偶数行、偶数列(即新增的行、列)都是零值的新图像New。接下来,用向下采样时所使用的高斯滤波器对新图像New进行滤波,得到向上采样的结果图像。需要注意的是,为了确保像素值区间在向上采样后与原始图像保持一致,需要将高斯滤波器的系数乘以4。
上一段描述的是OpenCV函数cv2.pyrUp()所实现的向上采样过程。了解上述过程,有助于我们更好地理解和使用该函数。但是,OpenCV库的目的就是要让我们忽略这些细节,直接使用函数cv2.pyrUp()完成向上采样。

eg1:使用函数cv2.pyrUp()对一幅图像进行向上采样,观察采样的结果。
程序如下:

import cv2
o=cv2.imread("lenas.bmp")
r1=cv2.pyrUp(o)
r2=cv2.pyrUp(r1)
r3=cv2.pyrUp(r2)
print("o.shape=",o.shape)
print("r1.shape=",r1.shape)
print("r2.shape=",r2.shape)
print("r3.shape=",r3.shape)
cv2.imshow("original",o)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.imshow("r3",r3)
cv2.waitKey()
cv2.destroyAllWindows()

本例使用cv2.pyrUp()函数对图像进行了3次向上采样。采样后,利用print()函数输出了每次采样结果图像的大小,用cv2.imshow()函数显示了原始图像和3次向上采样后的结果图像。
程序运行后,会输出如下结果:

o.shape= (64, 64, 3)
r1.shape= (128, 128, 3)
r2.shape= (256, 256, 3)
r3.shape= (512, 512, 3)

从上述输出结果可知,经过向上采样后,图像的宽度和高度都会变为原来的2倍,图像整体大小会变为原来的4倍。
程序还会显示如图11-6所示图像,图像大小就是上述输出结果所显示的大小。这里为了便于对比,将它们调整成了等高格式展示。读者可以通过各个图像内标题栏所占比例,看出各个图像大致的尺寸关系。
在下图中:
● ( a )图是原始图像o。
● ( b )图是对原始图像o进行向上采样后的结果图像r1。
● ( c )图是对图像r1进行向上采样后的结果图像r2。
● ( d )图是对图像r2进行向上采样后的结果图像r3。

openeuler python中文输出方块 python open ru_高斯滤波

openeuler python中文输出方块 python open ru_高斯滤波_02

openeuler python中文输出方块 python open ru_OpenCV_03


openeuler python中文输出方块 python open ru_Python-OpenCV_04