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 - Fatal编程技术网

Python 如何找到具有给定值的像素位置

Python 如何找到具有给定值的像素位置,python,image,opencv,Python,Image,Opencv,找到给定rgb值像素的x和y坐标的最快方法是什么?在本例中,黑色像素为100x100。我应该使用openCV还是图像?有人能给我一个想法或例子吗 #!/usr/bin/env python # coding: utf-8 import Image img = Image.open('splash.png') rgb = img.convert('RGB') r, g, b = rgb.getpixel((100, 100)) print r, g, b #for pixel in rgb.

找到给定rgb值像素的x和y坐标的最快方法是什么?在本例中,黑色像素为100x100。我应该使用openCV还是图像?有人能给我一个想法或例子吗

#!/usr/bin/env python
# coding: utf-8

import Image

img = Image.open('splash.png')
rgb = img.convert('RGB')
r, g, b = rgb.getpixel((100, 100))

print r, g, b
#for pixel in rgb.getdata():
#    print pixel
>>>0 0 0
正如您所见,我需要相反的方式。

不确定您指的是“短运行时间”还是“最快的键入命令”。如果您是指后者,则使用ImageMagick的
convert
命令键入大约需要4秒钟:

convert B7cjD.png txt: | grep "#000000"
100,100: (0,0,0,1)  #000000  black

这样做的唯一方法是迭代整个图像,并在找到一个与搜索匹配的像素时停止。如果您必须经常这样做,对于许多不同的图像,您可以将它们放入字典中以便更快地访问

import Image

def find_rgb(imagename, r_query, g_query, b_query):
    img = Image.open(imagename)
    rgb = img.convert('RGB')
    for x in range(img.size[0]):
       for y in range(img.size[1]):
           r, g, b, = rgb.getpixel((x, y))
           if r == r_query and g == g_query and b == b_query:
               return (x,y)

print(find_rgb('splash.png', 0, 0, 0))

请注意,只有在您必须不断搜索图像中的不同RGB值时,它才能变得更快。请注意,您可以创建某种哈希表RGB值来对图像的像素位置进行排序,这样您可以非常快速地访问所需的像素,但需要一些时间进行计算。这将是很好的,如果你将搜索一次又一次的单一RGB值相同的图像为不同的“输入”。