Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于非像素颜色的坐标定位_Python_Opencv_Colors_Coordinates - Fatal编程技术网

Python 基于非像素颜色的坐标定位

Python 基于非像素颜色的坐标定位,python,opencv,colors,coordinates,Python,Opencv,Colors,Coordinates,我试图在图像中获得特定的坐标。我在图像中的几个位置标记了一个红点,以指定我想要获得的坐标。在GIMP中,我使用了我能找到的最纯粹的红色(HTML表示法ff000)。我的想法是,我将在图像中迭代,直到我找到一个纯红色阴影,然后打印出坐标。我正在使用python和opencv来实现这一点,但我找不到任何好的教程(我能找到的最好的教程是,但不是很清楚……至少对我来说是这样)。下面是我正在处理的图像的一个示例。 我只是想知道如何找到红点像素的坐标 编辑(添加代码): 我不知道从这里该怎么办。我已经尝试过

我试图在图像中获得特定的坐标。我在图像中的几个位置标记了一个红点,以指定我想要获得的坐标。在GIMP中,我使用了我能找到的最纯粹的红色(HTML表示法ff000)。我的想法是,我将在图像中迭代,直到我找到一个纯红色阴影,然后打印出坐标。我正在使用python和opencv来实现这一点,但我找不到任何好的教程(我能找到的最好的教程是,但不是很清楚……至少对我来说是这样)。下面是我正在处理的图像的一个示例。 我只是想知道如何找到红点像素的坐标

编辑(添加代码):


我不知道从这里该怎么办。我已经尝试过一些代码,比如如果px==[x,y,z]寻找颜色检测,但这不起作用。

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

您可以通过以下方式使用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)

你试过代码了吗?如果是,请将其发布到使用opencv搜索斑点检测或使用opencv进行颜色分割。如果只是红色,请尝试从opencv搜索范围,然后查找非零值……我决定检查您的像素颜色可能已关闭的理论。我打印出了其中一个点周围的所有像素(WID300-400Len:100-200)。结果显示,右边没有值是纯红色。对于像素颜色[r,g,b]的所有输出,没有值超过50。考虑到红色的值可能不是255,但红色斑点上的值仍应高于50,这很奇怪。有什么想法吗?
#获取所有非零值coord=cv2.findNonZero(mask)
这一点很正确!非常感谢。
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)