我有一个numpy数组 - 从图像 - 这个形状:
Arr =
array([[[ 61, 61, 61],
[ 60, 60, 60],
[ 60, 60, 60],
...,
[203, 203, 203],
[201, 201, 201],
[199, 199, 199]],
.
.
.
[[204, 204, 204],
[204, 204, 204],
[204, 204, 204],
...,
[205, 205, 205],
[206, 206, 206],
[207, 207, 207]]], dtype=uint8)
我想在不同长度的“元组”中使用此数组,例如5(而不仅仅是当前的3):
array([[[ 61, 61, 61, 60, 60],
[ 60, 60, 60, 60, 60],
.
.
.
函数元组()似乎是用于列表的,并且在任何情况下它都不提供确定一组像素长度的选项。我也尝试使用zip(),因此:
newArr = zip(*[Arr[i::n] for i in range(n)]). For n=5, it gives:
newArr =
[(array([[ 61, 61, 61],
[ 60, 60, 60],
[ 60, 60, 60],
...,
[203, 203, 203],
[201, 201, 201],
[199, 199, 199]], dtype=uint8), array([[ 63, 63, 63],
[ 62, 62, 62],
[ 62, 62, 62],
.
.
.
[207, 207, 207],
[209, 209, 209],
[210, 210, 210]], dtype=uint8), array([[204, 204, 204],
[204, 204, 204],
[205, 205, 205],
...,
[206, 206, 206],
[207, 207, 207],
[208, 208, 208]], dtype=uint8))]
答案 0 :(得分:1)
将值分组为三个的原因是因为这些是颜色通道的值,RGB,HSV或任何格式。每个像素都有三个值,这就是为什么你不能以任何其他方式将它们分组的原因。您可以使用以下方法将图像转换为灰度:
from PIL import Image
import numpy as np
img = Image.open('imagename')
img2 = img.convert('L')
img2_array = np.asarray(img2).copy()
这会将每个像素的值更改为单个整数(0-255),并为您提供具有图像本身尺寸的数组。
修改强> 要将图像分割为五个像素组:
seg = 5
img2_array = img2_array.tolist()
img_grouped = np.array([img2_array[0][x:x+seg] for x in range(0,len(img2_array),seg)])