Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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/7/image/5.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_Image_Opencv_Pygame_Python Imaging Library - Fatal编程技术网

Python 利用当前颜色间隔快速查找像素位置

Python 利用当前颜色间隔快速查找像素位置,python,image,opencv,pygame,python-imaging-library,Python,Image,Opencv,Pygame,Python Imaging Library,我遇到了用当前颜色间隔查找像素位置的问题。 这是非常缓慢的: def inRange(self, tgColor, excColor, jump): if tgColor[0] > excColor[0] - jump and tgColor[0] < excColor[0] + jump and tgColor[1] > excColor[1] - jump and tgColor[1] < excColor[1] + jump and tgColor[2] &

我遇到了用当前颜色间隔查找像素位置的问题。 这是非常缓慢的:

def inRange(self, tgColor, excColor, jump):
    if tgColor[0] > excColor[0] - jump and tgColor[0] < excColor[0] + jump and tgColor[1] > excColor[1] - jump and tgColor[1] < excColor[1] + jump and tgColor[2] > excColor[2] - jump and tgColor[2] < excColor[2] + jump:
           return True
    return False

 for iy in xrange(self.pilImage.size[1]):
        for ix in xrange(self.pilImage.size[0]):
            if self.inRange(data[ix, iy], self.targetColor, self.jump):
def inRange(self、tgColor、excColor、jump):
如果tgColor[0]>excColor[0]-jump和tgColor[0]
所以,你能帮我改进这段代码,让它运行得更快吗。(图像大小-640 x 480)
也许还有另一个库:OpenCV、pygame、PIL?

您的代码可能会非常慢

OpenCV附带了一个函数。传递最小和最大像素值,得到一个二进制图像,传递的像素为白色,失败的像素为黑色

然后您可以使用查找白色像素的索引

下面是一个灰度值示例。它还可以扩展到彩色图像

例如:

>>> import cv2
>>> import numpy as np
>>> x = np.random.randint(1,10, (5,5))
>>> x
array([[9, 5, 1, 3, 1],
       [7, 7, 2, 1, 7],
       [9, 1, 4, 7, 4],
       [3, 6, 6, 7, 2],
       [3, 4, 2, 3, 1]])
>>> y = cv2.inRange(x,4,8)
>>> y
array([[  0, 255,   0,   0,   0],
       [255, 255,   0,   0, 255],
       [  0,   0, 255, 255, 255],
       [  0, 255, 255, 255,   0],
       [  0, 255,   0,   0,   0]], dtype=uint8)

>>> z = np.transpose(np.where(y>0))
>>> z
array([[0, 1],
       [1, 0],
       [1, 1],
       [1, 4],
       [2, 2],
       [2, 3],
       [2, 4],
       [3, 1],
       [3, 2],
       [3, 3],
       [4, 1]])

这个问题似乎脱离主题,因为它属于是的,我的代码非常慢,因为它必须在循环中进行307200次迭代:(,但您的建议非常有用。谢谢。