在图像处理与计算机视觉领域,OpenCV(Open Source Computer Vision Library)无疑是最为强大且广泛使用的工具之一。从基础的图像读取、
1.图片的上下,采样
下采样(Downsampling)
下采样通常用于减小图像的尺寸,从而减少图像中的像素数。这个过程可以通过多种方法实现,但最常见的是通过图像金字塔中的pyrDown
函数(在OpenCV中)或其他类似的滤波器(如平均池化、最大池化等)。pyrDown
函数基于高斯金字塔的概念,通过平滑和子采样(即每隔一行和一列取一个像素)来减小图像尺寸。下采样通常用于特征提取、图像压缩或预处理阶段以减少计算量。
上采样(Upsampling)
上采样是下采样的逆过程,用于增加图像的尺寸,从而增加图像中的像素数。然而,简单地插入新的像素(如最近邻插值)通常会导致图像质量下降,因为新插入的像素值可能是未经处理的或基于简单规则的(如直接复制最近的像素值)。因此,更复杂的插值方法(如双线性插值、双三次插值)或上采样算法(如OpenCV中的pyrUp
函数)被用来生成更平滑、更自然的图像。pyrUp
函数也是基于图像金字塔的概念,但它试图通过插值和放大来重建原始图像的细节。然而,需要注意的是,由于上采样过程中引入了新的像素值,因此通常无法完全恢复到原始图像的精确像素值。
实例:
python
import cv2
face = cv2.imread('kele.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow('face',face)
cv2.waitKey(0)
face_down_1 = cv2.pyrDown(face)
cv2.imshow('face1',face_down_1)
cv2.waitKey(0)
face_down_2 = cv2.pyrDown(face_down_1)
cv2.imshow('face2',face_down_2)
cv2.waitKey(0)
#
face_up_1 = cv2.pyrUp(face)
cv2.imshow('up1',face_up_1)
cv2.waitKey(0)
face_up_2 = cv2.pyrUp(face_up_1)
cv2.imshow('up2',face_up_2)
cv2.waitKey(0)
2.图像直方图绘制
- 灰度图像直方图 :
- 使用
cv2.calcHist
计算灰度图像的直方图。 - 使用
plt.plot
绘制直方图,并设置图形标题、x轴和y轴标签。
- 使用
- 彩色图像直方图 :
- 读取彩色图像。
- 遍历蓝色、绿色和红色通道。
- 对每个颜色通道使用
cv2.calcHist
计算直方图。 - 使用
plt.plot
绘制每个通道的直方图,并使用plt.setp
隐藏x轴标签以避免重叠。 - 设置图形标题、y轴标签和图例。
python
phone = cv2.imread('../day07/phone.png', cv2.IMREAD_GRAYSCALE)
a = phone.ravel()
# 参数解释:
# - a:一维数组,即像的像素值组成的数组。
# - bins=256:指定直方图的条数,即灰度级的数量。
plt.show()
phone_hist = cv2.calcHist([phone], [0], None, [16], [0, 256])
plt.plot(phone_hist) # 使用calcHist的值绘制曲线图
plt.show()
img = cv2.imread('../day07/phone.png')
color = ('b','g','r')
for i, col in enumerate(color):
histr = cv2.calcHist([img], [i], None,[256], [0, 256])
plt.plot(histr, color=col)
plt.show()