假设我把一张图片转换成一个数组
data1= numpy.asarray(source1.png)
data2= numpy.asarray(source2.png)
data3= numpy.asarray(source3.png)
data4= numpy.asarray(source4.png)
data5= numpy.asarray(source5.png)
据我所知,如果我要print(data1)
,我会得到一个数组,显示每个给定位置每个像素的RGB值
现在,我想比较所有数组data1, data2, data3, data 4, data5
,找出每个像素最常出现的RGB值,并将其作为新数组/图片输出
例如: 对于位置X1Y1和X2Y1,阵列将如下所示
data1= [[0 0 255], [0 1 0]]
data2= [[0 0 255], [0 1 0]]
data3= [[0 0 255], [0 1 0]]
data4= [[0 0 254], [0 1 0]]
data5= [[0 0 254], [0 1 0]]
由于[(0,0,255)]
是位置X1Y1和X2Y1的最常见值,因此新数组将保存为avg= [(0, 0, 255), (0, 1, 0)]
有没有一个功能可以做到这一点?我对数组的理解正确吗
您可以将rgb值转换为单个基数为16的整数,并使用
np.unique
查找重复项,如下所示:假设您想单独比较r、g和b值,原始答案:
您可以使用
np.bincount
和np.argmax
获得最常出现的值,您可以使用np.apply_along_axis
将其应用于堆叠图像阵列的最后一个轴:请注意,如果r、g和b中的任何一个都不出现一次以上,并且
np.bincount
仅适用于非负整数,则此方法将返回每个r、g和b的最低值如果要为r、g和b中的每一个返回自定义值,如果它们都不重复,则可以将此行为定义为函数而不是lambda表达式:
在这里,我们在bin计数前加上一个1,这样
argmax
如果其他值都不出现一次以上,则返回0相关问题 更多 >
编程相关推荐