Python 切片以更改numpy.array图像上的像素颜色
在上一个问题上,我问了如何使用opencv(BGR格式)更改上传到numpy.array上的图像的颜色。目标是将任何小于255的红色通道值转换为255 最佳答案是:Python 切片以更改numpy.array图像上的像素颜色,python,arrays,numpy,Python,Arrays,Numpy,在上一个问题上,我问了如何使用opencv(BGR格式)更改上传到numpy.array上的图像的颜色。目标是将任何小于255的红色通道值转换为255 最佳答案是: img[img[:, :, 2] < 255] = 255 这必须像这样读:if(img[:,:,2]
img[img[:, :, 2] < 255] = 255
这必须像这样读:if(img[:,:,2]<255),然后使这个像素红色通道=255,但我不知道如何读代码行使它听起来像那样
有人能给我解释清楚这个代码行吗?这样我就可以修改它了?写的时候我应该怎么读呢?首先,我不认为表达式能满足您的需要:将任何小于255的红色通道值转换为255。如果相应的红色通道值小于255,它会将所有三个通道的像素转换为255。如果您只想更改红色通道,则需要:
img[img[:, :, 2] < 255, 2] = 255
img[img[:,:,2]<255,2]=255
例如:
img = np.arange(12).reshape(2,2,3)
img
# array([[[ 0, 1, 2],
# [ 3, 4, 5]],
# [[ 6, 7, 8],
# [ 9, 10, 11]]])
img[img[:,:,2] < 5,2] = 5
img
#array([[[ 0, 1, 5], # the red channel of this pixel is modified to 5
# [ 3, 4, 5]],
#
# [[ 6, 7, 8],
# [ 9, 10, 11]]])
img=np.arange(12).重塑(2,2,3)
img
#数组([[0,1,2],
# [ 3, 4, 5]],
# [[ 6, 7, 8],
# [ 9, 10, 11]]])
img[img[:,:,2]<5,2]=5
img
#数组([[0,1,5]),此像素的红色通道修改为5
# [ 3, 4, 5]],
#
# [[ 6, 7, 8],
# [ 9, 10, 11]]])
这使用numpy。简单地说,赋值就是执行
语句试图执行的操作,替换布尔掩码(由img[:,:,2]<255生成)为真的值,并保留掩码为假的值。这称为逻辑索引
让我们将其分为两部分:
c=img[:, :, 2] < 255 # construct a boolean array
例如,假设您有一个数组A=[10,20,34,90,100]
,并且希望将A
中的所有元素更改为大于11的2
要使用逻辑索引执行此操作,请首先构造如下布尔数组:
b=A>11 # [0, 1, 1, 1, 1]
然后,使用b
索引A
A[b]=2
生成的数组如下所示:
[10, 2, 2, 2, 2]
编辑代表图像的数据数组的索引2
时,它不是指蓝色而不是红色(如注释中所述)?
b=A>11 # [0, 1, 1, 1, 1]
A[b]=2
[10, 2, 2, 2, 2]