You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pyplot绘制从图像边缘提取得到的坐标点列表

问题原因

  • 直接给plot/scatter传入二维坐标列表不符合matplotlib的参数要求,这两个方法需要分别传入独立的x坐标序列、y坐标序列
  • 图像的坐标体系和matplotlib默认坐标体系不一致:OpenCV中图像的原点在左上角,第一个维度i对应y轴向下递增,第二个维度j对应x轴向右递增,直接绘制会导致图像上下翻转
  • 原有代码没有调用grafico.show()展示画布,所以plot调用后也看不到内容
  • 二值图处理步骤存在笔误:bw_img - bwareaopen(bw_img, 50)没有赋值,处理结果被直接丢弃,需要改为bw_img = bwareaopen(bw_img, 50)

正确实现方式

将原有代码末尾的绘制部分替换为以下内容即可:

# 拆分x、y坐标:j对应x轴,i对应y轴
x = [p[1] for p in coordenadas]
y = [p[0] for p in coordenadas]

# 绘制推荐用scatter散点形式,不会出现连线混乱的问题
grafico.scatter(x, y, s=1, c='black') # s参数控制点的大小,可根据图像分辨率调整

# 翻转y轴适配图像坐标体系
grafico.gca().invert_yaxis()
# 锁定xy轴等比例,避免图像拉伸变形
grafico.axis('equal')
# 展示绘制结果
grafico.show()

可选优化

可以用numpy方法替代两层for循环提取坐标,运行效率更高:

# 替代原有遍历坐标的两层循环
y, x = np.where(bw_img_edges == 255)
coordenadas = np.stack((y, x), axis=1)

内容的提问来源于stack exchange,提问作者L. Guilherme P. Melquiades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:39:04