python numpy.在二维或三维矩阵上的位置

zy1mlcev  于 2022-12-28  发布在  Python
关注(0)|答案(1)|浏览(156)

我想得到的指标,目标是位于使用numpy背景图像。每个图像的背景颜色实际上是可变的,所以除了颜色的squaure,其他颜色(在这种情况下,黑色油漆),包括内部的广场将有所不同。我不知道如何处理这一点,因为我不熟悉numpy。

import numpy as np

#changing to grayscale to have 2d array 
output = cv2.imread('backgroundimage.png', cv2.IMREAD_GRAYSCALE)
output1 = cv2.imread('target.png', cv2.IMREAD_GRAYSCALE)

我试图将图像更改为2D阵列,因为我认为它可能更容易接近。

a = np.where(output==output1)

显然,这对二维或三维不起作用。我想要的输出将是这样的

desired output = (108, 23) (x and y coordination of where its found)

那我怎么能做我想做事?

ctehm74n

ctehm74n1#

您必须使用滑动窗口方法,并确保与目标进行比较的每个窗口的所有像素都相等。您可以使用sliding_window_viewall来实现这一点。您可以通过将目标中不希望匹配的任何值设置为True来屏蔽这些值:

import cv2
import numpy as np

output = cv2.imread('backgroundimage.png', cv2.IMREAD_GRAYSCALE)
output1 = cv2.imread('target.png', cv2.IMREAD_GRAYSCALE)

# Apply sliding window view
windows = np.lib.stride_tricks.sliding_window_view(output, output1.shape)

# Only check the 1 pixel border by making a mask
mask = np.full_like(target, False)
mask[1:-1, 1:-1] = True

# Apply mask and check match everywhere
masked = (windows == output1) | mask
matches = masked.all(axis=(2, 3))

locations = np.where(matches)

地点:

(array([24], dtype=int64), array([108], dtype=int64))

相关问题