基于像素颜色的坐标位置

时间:2018-03-07 09:08:28

标签: python opencv colors coordinates

我正在尝试获取图像中的特定坐标。我在几个位置的图像中标记了一个红点,以指定我想要的坐标。在GIMP中,我使用了我能找到的纯粹红色(HTML表示法 ff000 )。我的想法是,我会遍历图像,直到找到纯红色的阴影,然后打印出坐标。我正在使用python和opencv这样做,但我找不到任何好的教程(我能找到的最好的是this,但它不是很清楚......至少对我而言)。以下是我正在处理的图片示例。enter image description here 我只是想知道如何用红点找到像素的坐标。

编辑(添加代码):

import cv2
import numpy as np

img = cv2.imread('image.jpg')
width, height = img.shape[:2]
for i in range(0,width):
   for j in range(0,height):
      px = img[i,j]

我不知道该怎么做。我尝试过if px == [x,y,z]这样的代码寻找颜色检测,但这种代码无效。

2 个答案:

答案 0 :(得分:1)

您可以通过cv2来做到这一点:

image = cv2.imread('image.jpg')
lower_red = np.array([0,0,220])  # BGR-code of your lowest red
upper_red = np.array([10,10,255])   # BGR-code of your highest red 
mask = cv2.inRange(image, lower_red, upper_red)  
#get all non zero values
coord=cv2.findNonZero(mask)

答案 1 :(得分:0)

你可以用PIL和numpy做到这一点。我确信cv2有类似的实现。

from PIL import Image
import numpy as np

img = Image.open('image.png')

width, height = img.size[:2]
px = np.array(img)

for i in range(height):
   for j in range(width):
      if(px[i,j,0] == 255 & px[i,j,1] == 0 & px[i,j,2] == 0):
          print(i,j,px[i,j])

这不适用于您提供的图像,因为没有任何像素(255,0,0)。当它被压缩为.jpg时,某些东西可能已经改变,或者你没有像你想象的那样让它们变成红色。也许您可以尝试在GIMP中关闭消除锯齿功能。