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

如何用Python提取图像网格中同颜色单元格的坐标?

提取同颜色网格单元格坐标的新手友好指南

先给你吃个定心丸:这个任务完全适合图像处理入门,核心思路就是「颜色匹配→生成掩码(Masking)→定位坐标」,一步步拆解下来非常清晰,而且Masking确实是这个任务的核心操作,它能帮你精准锁定目标颜色的区域。

第一步:准备工具

推荐用Python的两个新手友好型库,操作简单、文档齐全:

  • Pillow(原PIL):处理图像的基础库,直观易上手
  • numpy:用来处理图像的像素数据,快速计算坐标

先在终端里安装它们:

pip install pillow numpy

第二步:完整操作步骤

1. 加载图像并转换格式

先把你的网格图像加载进来,转换成方便操作像素的数组格式:

from PIL import Image
import numpy as np

# 替换成你的图像文件路径
img = Image.open("your_grid_image.png")
# 将图像转为numpy数组,方便后续像素级操作
img_array = np.array(img)

2. 获取目标颜色的RGB值

你需要先确定目标颜色(比如橙色)的准确RGB数值,有两种简单方法:

  • 用系统自带的画图工具/Photoshop打开图像,取目标单元格的颜色,记下RGB值(比如标准橙色是(255, 165, 0),但要以你实际图像为准)
  • 用代码提取已知坐标的颜色(比如你提到的(19,0)):
# 注意:numpy数组的索引是(行,列),对应你的(y,x)坐标,所以(19,0)要写成[0,19]
target_color = img_array[0, 19]
print("目标颜色RGB值:", target_color)

3. 生成颜色掩码(核心步骤)

掩码是一个和原图尺寸一致的二值数组:目标颜色的位置标记为True,其余为False,这一步就是精准筛选目标区域的关键:

# 对比每个像素的RGB值,三个通道完全匹配才标记为True
mask = (img_array == target_color).all(axis=2)

解释:axis=2是因为每个像素由R、G、B三个值组成,需要三个值都匹配才算同颜色

4. 提取所有目标单元格的坐标

从掩码中找出所有True的位置,转换成你需要的(x,y)格式(注意numpy索引是(y,x),要反过来):

# 获取所有匹配位置的行、列索引
y_indices, x_indices = np.where(mask)
# 转换成(x,y)坐标列表
coordinates = list(zip(x_indices, y_indices))

# 打印结果验证
print("所有目标颜色单元格的坐标:")
for coord in coordinates:
    print(coord)

5. 保存坐标(可选)

如果需要把坐标保存下来供后续使用,直接写入文件即可:

with open("target_coords.txt", "w") as f:
    for coord in coordinates:
        f.write(f"{coord[0]}, {coord[1]}\n")

新手常见问题解决

  • 颜色有轻微色差怎么办? 如果网格单元格存在阴影、渐变导致颜色不完全统一,不能直接用==匹配,可以改成判断像素值在误差范围内:
    # 允许每个RGB通道有±10的误差
    lower_bound = target_color - 10
    upper_bound = target_color + 10
    mask = np.logical_and((img_array >= lower_bound).all(axis=2), (img_array <= upper_bound).all(axis=2))
    
  • 网格是规则排列的? 如果你的网格是整齐的,还可以先划分固定大小的网格区域,再检查每个区域的主颜色,效率更高,但新手先从颜色匹配入手就足够了。

内容的提问来源于stack exchange,提问作者POOJA GUPTA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:47:45