使用opencv、numpy和python搜索图像中的像素

使用opencv、numpy和python搜索图像中的像素,python,numpy,opencv,Python,Numpy,Opencv,我已经能够读取一幅图像,然后使用一个坐标位置读取一个特定的像素,这个坐标位置很好(pixel=img[801600]) 我的下一步是遍历每个像素,并尝试使用像素数据查找位置(在本例中为[801600]) 我在“img”中的迭代无法找到像素。 我将感谢任何帮助或指导 import cv2 import numpy as np img = cv2.imread('one.jpg') pixel = img[801,600] print (pixel) # pixel value i am se

我已经能够读取一幅图像,然后使用一个坐标位置读取一个特定的像素,这个坐标位置很好(
pixel=img[801600]

我的下一步是遍历每个像素,并尝试使用像素数据查找位置(在本例中为[801600])

我在“img”中的迭代无法找到像素。 我将感谢任何帮助或指导

import cv2
import numpy as np

img = cv2.imread('one.jpg')

pixel = img[801,600]

print (pixel) # pixel value i am searching for

for i in img:
    for x in i:
        if x.sort == pixel.sort:
            print ("SUCCESS")

我认为您面临的主要问题是,您需要定义图像的
宽度
高度
,以便知道在x和y方向需要循环多少像素

# grab the image dimensions
h = img.shape[0]
w = img.shape[1]
point_found_at = []

# loop over the image, pixel by pixel
for y in range(0, h):
    for x in range(0, w):
        if (x == 801) and (y == 600):
            print ("SUCCESS")
            point_found_at.append((x, y))

内置的
枚举
迭代函数将帮助您。它将提供一个迭代索引,在您的情况下,它将提供一个像素索引:

import cv2
import numpy as np

img = cv2.imread('one.jpg')

pixel = img[801,600]
print (pixel) # pixel value i am searching for

def search_for():
    for iidx, i in enumerate(img):
        for xidx, x in enumerate(i):
            if (x == pixel).all():
                print (f"SUCCESS - [{iidx} {xidx}]")

if __name__ == "__main__":
    print("Search using for loops...")
    search_for()
也就是说,for循环在python中很慢,代码在适当大的映像上运行需要一段时间。相反,最好使用
np.array
方法,因为它们针对这种类型的应用进行了优化:

import cv2
import numpy as np

img = cv2.imread('one.jpg')

pixel = img[801,600]
print (pixel) # pixel value i am searching for

def search_array():
    # create an image of just the pixel, having the same size of 
    pixel_tile = np.tile(pixel, (*img.shape[:2], 1))
    # absolute difference of the two images
    diff = np.sum(np.abs(img - pixel_tile), axis=2)
    # print indices
    print("\n".join([f"SUCCESS - {idx}" for idx in np.argwhere(diff == 0)]))


if __name__ == "__main__":
    print("Search using numpy methods...")
    search_array()

如果x.sort==pixel.sort语句正在测试
x
对象上的
sort
方法是否与
pixel.sort
函数相等(引用相等)。它们永远不会相等,因为它们位于不同的对象上。我不完全清楚为什么要使用
sort
方法来测试相等性。你应该能够只检查
if(x==pixel).all()
就可以得到你想要的东西。

看起来我有一些关于numpy方法的研究和学习。我真的很感谢你的帮助。非常感谢DBat!