import matplotlib.image as img
import numpy as np
import matplotlib as plt
import matplotlib.pyplot as plt
image1 = img.imread("82.png",0)
image2 = img.imread("83.png",0)
diff = image2 - image1
matchingInd = np.where(diff > 0.6)
diff[matchingInd] = 1
plt.imshow(diff)
image1和image2的背景是黑色,但有一些亮点。image2与image1是同一张照片,但只是添加了一些亮点或删除了一些亮点。如何在image2上找到添加的亮点的位置?
2条答案
按热度按时间3htmauhk1#
因为你已经标记了
OpenCV
,我用下面的方法复制了你的问题。考虑2个图像阵列
a
和b
,其中255
是指亮点:在
b
中,与a
相比,删除了一些斑点,并添加了新斑点:使用
cv2.subtract
查找仅b
中新添加的斑点。这应读作 *a
中的元素从a
中的元素中减去 *:diff
仅包含新添加的斑点:现在使用
np.argwhere
找到上面提到的坐标:5q4ezhmt2#
您可以使用
numpy.where
或numpy.argwhere
它们将给予相同的结果,但输出形状将有所不同:
numpy.where
将为您提供一个包含两个元素的元组:所有x
坐标(x1, x2, ...)
的数组和所有y
坐标(y1, y2, ...)
的数组numpy.argwhere
将给予一个形状为(N,2)的数组,其中每行对应于一个像素的坐标注意:在尝试运行
diff[matchingInd] = 1
行时,使用np.argwhere应该会引发错误