使用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!