Python3环境下如何使用matplotlib绘制opencv加载图像的单行数据
基于OpenCV+Matplotlib绘制指定行像素值曲线的实现
核心逻辑
OpenCV通过cv2.imread加载得到的图像本质是NumPy数组,存储格式为[行索引(垂直方向y坐标), 列索引(水平方向x坐标), 通道数],因此提取某一行的像素数据仅需要对数组做固定行号的切片操作即可,不需要额外的复杂处理。
实现步骤
- 确定需要绘制的目标行号:行号范围为0到图像高度减1,例如取图像垂直方向中点的行,行号计算为
image.shape[0] // 2 - 切片提取目标行数据:固定行号、取全列范围的像素值,即
target_row_data = image[目标行号, :, :] - 调用matplotlib的绘图接口,以该行上的像素水平坐标为横轴、对应像素的亮度值为纵轴绘制曲线
可直接运行的完整代码
import cv2 import matplotlib.pyplot as plt import numpy as np # 读取图像 image = cv2.imread("test.png", 3) # 将OpenCV默认的BGR通道顺序转为RGB,保证绘图时通道和实际色彩对应 image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 选取目标行:此处示例取图像垂直中点的行,可自行修改索引值 target_row = image.shape[0] // 2 # 提取该行的全量像素数据,形状为(图像宽度, 3) row_pixels = image_rgb[target_row, :, :] # 绘制行像素值变化曲线 plt.figure(figsize=(10, 5)) x_axis = np.arange(image.shape[1]) # 横轴为该行上每个像素的水平坐标 plt.plot(x_axis, row_pixels[:, 0], color='r', label='Red Channel') plt.plot(x_axis, row_pixels[:, 1], color='g', label='Green Channel') plt.plot(x_axis, row_pixels[:, 2], color='b', label='Blue Channel') # 配置图上的标注信息 plt.xlabel("Horizontal Pixel Position") plt.ylabel("Pixel Brightness (0-255)") plt.title(f"Pixel Intensity Profile of Row {target_row}") plt.legend() plt.grid(linestyle='--', alpha=0.3) plt.show() # 保留原有原图显示逻辑 cv2.imshow("Original", image) cv2.waitKey(0) cv2.destroyAllWindows()
常见注意事项
- 如果需要绘制灰度图的单行强度曲线,读取图像时可将
cv2.imread的第二个参数设为0,此时提取的行数据为一维亮度序列,直接传入plt.plot()即可绘制,无需拆分三个通道。 - 行号取值不可超出
[0, image.shape[0]-1]范围,否则会触发NumPy数组索引越界报错。
内容的提问来源于stack exchange,提问作者Snowflake
相关产品推荐
相关产品推荐

