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

时间:2014-10-30 12:51:13

标签: python image opencv

Example with a black pixel in the middle

找到具有给定rgb值的像素的x和y坐标的最快方法是什么?在此示例中,黑色像素为100x100。我应该使用openCV还是Image?有没有人对我有想法或榜样?

#!/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

正如你所看到的,我需要相反的方式。

2 个答案:

答案 0 :(得分:1)

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

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))

答案 1 :(得分:0)

不确定您的意思是"短时间"或"最快的命令键入"。如果你的意思是后者,那么使用ImageMagick的convert命令输入大约需要4秒钟:

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