gpt4 book ai didi

python - OpenCV:如何检测像素颜色变化

转载 作者:行者123 更新时间:2023-12-02 17:48:54 27 4
gpt4 key购买 nike

我成功地为使用创建的给定图片着色了我想要的区域

numpy (`img = np.zeros((512,512,3), np.uint8)`).

我使用OpenCV显示图片
cv2.imshow()

使用鼠标光标着色后,保存图片。

如何检测图像的给定像素的颜色已被修改?

最佳答案

通常,可以使用常用的==<!=等运算符比较两个数组。比较返回一个 bool(boolean) (真/假)数组:

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将是一个 bool(boolean) 数组,相等时为 True,不相等时为 False:
array([False,  True,  True,  True, False], dtype=bool)

但是,还有一个警告,因为您正在处理图像数据。最后,您可能想要获得的是一个2D数组,其中任何颜色都发生了变化,但是您正在比较两个3D数组,因此您将获得一个3D bool(boolean) 数组作为输出。

例如:
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来“减少”事物并获得二维数组,该数组中任何像素中的任何颜色都不同。

为此,我们将 axis kwarg用作 np.all,以指定应沿最后一个轴进行比较(在这种情况下, -12是等效的: -1仅表示“最后一个”):
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)

还要注意,如果需要“翻转”此数组,则可以将 !=运算符与 np.any一起使用,而不是 np.all,或者可以使用 ~(逻辑上不是numpy)运算符来反转结果。例如。 opposite = ~boolean_array

关于python - OpenCV:如何检测像素颜色变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com