【问题标题】:coordinate location based off pixel color基于像素颜色的坐标位置
【发布时间】:2018-08-15 07:41:27
【问题描述】:

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

编辑(添加代码):

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] 之类的代码来寻找颜色检测,但这不起作用。

【问题讨论】:

  • 您尝试过任何代码吗?如果是,请也发布它
  • 搜索使用opencv进行斑点检测使用opencv进行颜色分割
  • 如果只是红色,试试 OpenCV 中的 inRange ,然后找到非零值...

标签: python opencv colors coordinates


【解决方案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)

【讨论】:

  • #get all non zero values coord=cv2.findNonZero(mask) 这个是正确的!谢谢
【解决方案2】:

你可以用 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 中关闭抗锯齿功能。

【讨论】:

  • 我决定检查您的理论,即像素颜色可能已关闭。我打印了一个点周围的所有像素(宽度 300 - 400 len:100-200)。原来你没有价值是纯 255 红色。对于像素颜色 [r,g,b] 的所有输出,没有值高于 50。考虑到红色的值可能不是 255,但在红色点上它仍应高于 50,这很奇怪。有什么想法吗?
猜你喜欢
  • 2016-02-09
  • 2020-11-08
  • 1970-01-01
  • 2020-11-02
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多