我已经成功地将我想要的区域着色为使用
创建的给定图片numpy (`img = np.zeros((512,512,3), np.uint8)`).
我使用OpenCV显示图片
cv2.imshow()
使用鼠标光标着色后,我保存图片。
如何检测到图像中给定像素的颜色已被修改?
答案 0 :(得分:1)
通常,可以使用通常的==
,<
,!=
等运算符来比较两个数组。比较返回一个布尔(True / False)数组:
import numpy as np
x = np.array([0, 1, 2, 3, 4])
y = np.array([9, 1, 2, 3, 7])
arrays_equal = x == y
arrays_equal
将是一个布尔数组True
,它们相等,而False
则不是:
array([False, True, True, True, False], dtype=bool)
然而,还有一个警告,因为您正在使用图像数据。你最想得到的是一个 2D阵列,其中任何颜色都有变化,但你要比较两个 3D阵列,所以你&#39;我将得到一个3D布尔数组作为输出。
例如:
im = np.zeros((5,5,3), dtype=np.uint8)
im2 = im.copy()
# Change a pixel in the blue band:
im2[0,0,2] = 255
# The transpose here is just so that the bands are printed individually
print (im == im2).T
这将产生:
[[[ True True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]]
[[ True True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]]
[[False True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]]]
当然,你可能想要的更像是最后一支乐队。
在这种情况下,您希望np.all
使用&#34;减少&#34;事情向下并得到一个二维数组,其中任何像素中的任何颜色都不同。
要执行此操作,我们会使用axis
kwarg np.all
指定比较应沿最后一个轴(-1
或2
进行在这种情况下是等价的:-1
只是意味着&#34;最后&#34;):
np.all(im == im2, axis=-1)
哪个收益率:
array([[False, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
另请注意,如果您需要&#34;翻转&#34;对于此数组,您可以将!=
运算符与np.any
而不是np.all
一起使用,也可以使用~
(逻辑非numpy)运算符反转结果。例如。 opposite = ~boolean_array
。