如何提取二值图像255值像素的行列列表并使用matplotlib连续绘图
实现步骤
1. 单独创建行、列坐标列表
在原有循环外初始化两个空列表,遍历到符合条件的像素时分别存入对应列表:
# 初始化空列表存储行、列坐标 rows = [] cols = [] for row in range(0,700): for column in range(354): if thresh[row][column]==255: rows.append(row) cols.append(column)
如果是处理视频逐帧数据,可将列表初始化逻辑放在帧遍历循环内部,每帧生成一组行、列列表即可。
2. 基于matplotlib实现列值连续绘制
以行坐标为横轴、列坐标为纵轴绘制连续曲线,示例代码如下:
import matplotlib.pyplot as plt # 创建画布 plt.figure(figsize=(10,6)) # 连续绘制列值变化曲线 plt.plot(rows, cols, c='blue', linewidth=1, label='列坐标变化') # 可选:如果同个行存在多个255像素,可改用散点绘制:plt.scatter(rows, cols, c='red', s=2, label='255像素位置') # 坐标轴设置 plt.xlabel('行坐标', fontsize=12) plt.ylabel('列坐标', fontsize=12) plt.title('二值图255像素列坐标连续分布', fontsize=14) plt.legend() # 反转y轴适配图像坐标系(图像左上角为原点,列值从上到下递增,可根据需求调整) plt.gca().invert_yaxis() plt.show()
补充说明
如果单帧图像中同一行存在多个取值为255的像素,可根据需求调整绘制逻辑:
- 若需要保留所有点,改用散点图展示即可
- 若需要每行仅保留一个列值,可在遍历行时添加取均值/最大值/最小值的逻辑
内容的提问来源于stack exchange,提问作者Sch. M
相关产品推荐
相关产品推荐

