Python 检查图像中绿色和蓝色值的奇偶性
我有一个形状为(9,8,2)的数组ver,它是我从图像中提取的。 我搜索要做的是迭代这个数组的像素,检查绿色和蓝色值是否有不同的奇偶校验,如果有,将结果True放入一个列表中,并对每一行执行相同的操作Python 检查图像中绿色和蓝色值的奇偶性,python,numpy,image-processing,rgb,Python,Numpy,Image Processing,Rgb,我有一个形状为(9,8,2)的数组ver,它是我从图像中提取的。 我搜索要做的是迭代这个数组的像素,检查绿色和蓝色值是否有不同的奇偶校验,如果有,将结果True放入一个列表中,并对每一行执行相同的操作 ver = im_arr[:9,:8,1:3] 在这里,我提取了图像的前9行,前8个像素,并提取了列,使其仅具有绿色和蓝色值。 我现在知道如何使用这样的2D阵列: cf = cf[:,1:3] jou = (cf.sum(1)%2).astype(bool) 但在这种情况下,对于3D阵列,我
ver = im_arr[:9,:8,1:3]
在这里,我提取了图像的前9行,前8个像素,并提取了列,使其仅具有绿色和蓝色值。
我现在知道如何使用这样的2D阵列:
cf = cf[:,1:3]
jou = (cf.sum(1)%2).astype(bool)
但在这种情况下,对于3D阵列,我真的不知道怎么做,我尝试了三个for循环,但它不起作用:
for i in range(ver.shape[0]):
for y in range(ver.shape[1]):
for z in range(ver.shape[2]):
juju[i,y,z] = (ver.sum(1)%2).astype(bool)
此代码生成一个随机图像并提取子集。然后检查数组中所有数字的剩余部分是否可以被2整除。np.all调用检查最后一个维度中的所有值是否为True,如果为True,则返回True,否则返回False。为了得到你想要的面具,我用~
编辑以添加一个解决方案,该解决方案检查跨维度的两个值是相等还是奇数
import numpy as np
image = np.random.randint(0, 255, (100, 100, 3))
subset = image[:9, :8, 1:]
even = np.remainder(subset, 2) == 0
mask = ~np.equal(even[..., 0], even[..., 1])
如果遮罩绿色和蓝色通道的LSB并添加它们,则只能获得:
0 + 0 = 0
0 + 1 = 1 <--- THIS
1 + 0 = 1 <--- THIS
1 + 1 = 2
你能简单解释一下奇偶校验是什么意思吗?如果我从图像中提取一个像素,我有一个像这样的阵列RGB,例如[5 140 24],我想检查140和24是否具有相同的奇偶校验(G和B值),这里是的,它们甚至返回False。如果它们有不同的奇偶校验->True,请提供一个,包括一些输入和预期的输出。我注意到它不适用于[133 201]这样的奇数,它也会返回True,它必须返回False,因为它们具有相同的奇偶校验(奇数)啊,我可能错误地解释了这个问题。我想他只是想检查一下是否有相同的情况,而不是两者都有。我会更新答案,以包括一个检查,如果两者都是相同的,无论是偶数或奇数。非常感谢!轴的-1是什么意思?它是指最后一个轴。因此,axis=0将对列进行求和,axis=1将对行进行求和,axis=2将对通道进行相加/求和。轴=2与轴=-1相同,因为2是最后一个轴。
0 + 0 = 0
0 + 1 = 1 <--- THIS
1 + 0 = 1 <--- THIS
1 + 1 = 2
mask = np.sum((ver & 1), axis=-1) == 1