python - Numpy 展平维度函数

标签 python numpy

我是 Python 新手,正在尝试从 numpy 数组中提取 RGB 编码的像素标签。例如:

image.shape
>> (256, 256, 3)

转换为:

image.shape
>> (256, 256, 1)

基于自定义函数。在 Javascript 中,这样的函数将是(当然,确切的 RGB 编码是无关紧要的 - 但能够使用自定义函数是相关的):

RGBtoVal = ([r,g,b])=>{
   r = Math.floor(r*9/255);
   g = Math.floor(g*9/255);
   b = Math.floor(b*9/255);
   if (r>0) return r+18;
   if (g>0) return r+9;
   return b;
}

我知道reshapesqueeze有助于降低维度,但没有函数。另外,形状为 (256,256,1) 的 numpy 矩阵与 (256,256) 相同吗?

最佳答案

numpy 中,您可以使用向量,而不必单独处理每个像素。

在示例中,我使用图像 4x4 和值 (1,1,1)

import numpy as np

image = np.ones([4,4,3])  # image 4x4 with RGB (3 values)

print(image.shape) # (4, 4, 3)

R = image[:,:,0]  # all R values
G = image[:,:,1]  # all G values
B = image[:,:,2]  # all B values

print(R.shape) # (4, 4)
print(G.shape) # (4, 4)
print(B.shape) # (4, 4)

R = R * 9/255
G = R * 9/255
B = B * 9/255

R[ R > 0 ] += 18
G[ G > 0 ] += 9

print(R)
print(G)
print(B)

print(image)

或者您甚至可以在拆分为 R,G,B 之前使用 * 9/255

import numpy as np

image = np.ones([4,4,3])

print(image.shape)

image = image * 9/255

R = image[:,:,0]
G = image[:,:,1]
B = image[:,:,2]

R[ R > 0 ] += 18
G[ G > 0 ] += 9

print(R)
print(G)
print(B)

print(image)

如果您想以更传统的方式执行此操作,请使用 numpy.apply_along_axis(func, axis, arr)与轴 2

import numpy as np

# --- fuctions ---

def function(rgb):
    #rgb = rgb * 9/255
    r, g, b = rgb

    r = r * 9/255
    g = g * 9/255
    b = b * 9/255

    if r > 0:
        r += 18
    if g > 0 :
        g += 9 

    return [r,g,b]

# --- main ---

image = np.ones([4,4,3])

print(image.shape)

image = np.apply_along_axis(function, 2, image)

print(image[:,:,0])  # R
print(image[:,:,1])  # G
print(image[:,:,2])  # B

print(image)

关于python - Numpy 展平维度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62106035/

相关文章:

python - 如何检查 python 变量是否属于 pandas.core.series.Series 类型

python - 如何使 argsort 结果在相等值之间是随机的?

用于 2D 外推样条函数的 Python Scipy?

python - 2 个向量中所有点之间的欧氏距离

python - 将文本文件转换为 numpy 数组

python - 无法在 python 中将字母数字转换为字符串

Python 操作系统模块错误

python - 有没有办法使用一个命令设置图形中所有文本的格式?

python - 写入使用 Paramiko/pysftp "open"方法打开的 SFTP 服务器上的文件很慢

python - 如何在python中计算均值?