将PNG图像转换为2D阵列

时间:2016-09-13 06:25:32

标签: python arrays numpy

我有一个PNG文件,当我将图像转换为numpy数组时,其格式为184 x 184 x 4.图像为184 x 184,每个像素为RGBA格式,因此为3D数组

这是B& W图像,像素为[255,255,255,255]或[0,0,0,255]。

我想将其转换为184 x 184 2D阵列,其中像素现在为1或0,具体取决于它是[255,255,255,255]还是[0,0,0,255]。

任何想法如何直接转换。

2 个答案:

答案 0 :(得分:1)

有几种方法可以进行比较,为我们提供boolean array然后,我们只需要通过类型转换转换为int array。因此,对于比较,一种简单的方法是与255进行比较,并检查沿最后一个轴的ALL匹配。这与检查[255, 255, 255, 255]相对应。因此,一种方法就是这样 -

((arr == 255).all(-1)).astype(int)

示例运行 -

In [301]: arr
Out[301]: 
array([[[255, 255, 255, 255],
        [  0,   0,   0, 255],
        [  0,   0,   0, 255]],

       [[  0,   0,   0, 255],
        [255, 255, 255, 255],
        [255, 255, 255, 255]]])

In [302]: ((arr == 255).all(-1)).astype(int)
Out[302]: 
array([[1, 0, 0],
       [0, 1, 1]])

答案 1 :(得分:1)

如果你说的数组中只有两个值,只需缩放并返回其中一个维度:

<select id="pick">
        <option value="v2">2</option>
        <option value="v3">3</option>
</select>
<input type="button" value="Generate" onclick="genFunc(this)" />
<div id="v2">test1</div>
<div id="v3">test2</div>
<script>function genFunc(sel) {
var e = document.getElementById("pick");
var strUser = e.options[e.selectedIndex].value;
var divChange = document.getElementById(strUser);
divChange.style.visibility= "visible" ;
        }</script><style>#v2 {
    visibility: hidden;
}

#v3 {
    visibility: hidden;
}</style>