gpt4 book ai didi

python - Numpy:如何将颜色矩阵转换为扁平向量

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:57 25 4
gpt4 key购买 nike

我正在尝试使用 sklearn 的 Mean Shift 算法对彩色图像进行分割。我有以下代码:

import cv2
import numpy as np
from sklearn.cluster import MeanShift, estimate_bandwidth
from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt
from itertools import cycle
from PIL import Image

image = Image.open('sample_images/fruit_half.png').convert('RGB')
image = np.array(image)

red = image[:,:,2]
green = image[:,:,1]
blue = image[:,:,0]

我已读取图像并将其转换为 numpy 数组。然后我提取了每个颜色 channel (R、G、B),以便我可以将每个 channel 用作分类变量。

我想把上面的颜色矩阵转换成一个扁平化的向量,因为我想用它作为分类的变量。例如。如果原始图像为 100x100,则展平后的颜色样本矩阵将为 10000 x 3。

我不想将每个矩阵转换成它自己的向量;我想将所有三种颜色矩阵制成一个扁平化矢量。

但是,我不确定我可以使用什么方法来做到这一点。任何见解都值得赞赏。

最佳答案

您可以 reshape 数组以获得所需的效果:

img = NP.zeros((100, 100, 3), dtype='int')
img[:,:,0] = NP.arange(0, 10000).reshape(100, 100)
img[:,:,1] = 1
img[:,:,2] = 2

展平图像,使每种颜色成为一列(即 10000 x 3):

img.reshape(-1, 3)

输出:

array([[    0, 22222, 33333],
[ 1, 22222, 33333],
[ 2, 22222, 33333],
...,
[ 9997, 22222, 33333],
[ 9998, 22222, 33333],
[ 9999, 22222, 33333]])

要转换为 3 x 10000 数组,您可以使用:

img.transpose(2, 0, 1).reshape(3, -1)

输出:

array([[    0,     1,     2, ...,  9997,  9998,  9999],
[22222, 22222, 22222, ..., 22222, 22222, 22222],
[33333, 33333, 33333, ..., 33333, 33333, 33333]])

关于python - Numpy:如何将颜色矩阵转换为扁平向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56993687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com