首页 > 解决方案 > 如果我知道颜色(RGB),如何获取像素坐标?

问题描述

我使用 Python、opencv 和 PIL。

image = cv2.imread('image.jpg')

color = (235, 187, 7)

如果我知道像素颜色,如何获得像素坐标(x,y)?

标签: pythonpython-3.xopencvpython-imaging-library

解决方案


这是一个numpythonic解决方案。Numpy 库尽可能加快操作速度。

  • 假设颜色为:color = (235, 187, 7)

indices = np.where(img == color)

  • 我使用 numpy.where() 方法检索两个数组的元组索引,其中第一个数组包含颜色像素的 x 坐标 (235, 187, 7),第二个数组包含这些像素的 y 坐标.

现在indices返回如下内容:

(array([ 81,  81,  81, ..., 304, 304, 304], dtype=int64),
 array([317, 317, 317, ..., 520, 520, 520], dtype=int64),
 array([0, 1, 2, ..., 0, 1, 2], dtype=int64))
  • 然后我使用 zip() 方法获取包含这些点的元组列表。

coordinates = zip(indices[0], indices[1])

  • 但是,如果您注意到这是一个具有三个通道的彩色图像,每个坐标将重复三次。我们必须只保留唯一的坐标。这可以使用set()方法来完成。

unique_coordinates = list(set(list(coordinates)))


推荐阅读