我有一个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]。
任何想法如何直接转换。
答案 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>