python - Numpy:如何将颜色矩阵转换为扁平向量
问题描述
我正在尝试使用 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 数组。然后我提取了每个颜色通道(R、G、B),以便我可以将每个颜色通道用作分类变量。
我想把上面的颜色矩阵转换成一个扁平的向量,因为我想把它用作分类的变量。例如,如果原始图像是 100x100,那么展平的颜色样本矩阵将是 10000 x 3。
我不想将每个矩阵转换为自己的向量;我想将所有三种颜色矩阵制成一个扁平向量。
但是,我不确定我可以使用什么方法来做到这一点。任何见解都值得赞赏。
解决方案
您可以重塑数组以获得所需的效果:
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]])
推荐阅读
- regex - 当使用正则表达式可能只存在一个或不存在时,如何匹配两个边界之间的字符串
- react-native - 打开键盘减小视图的大小并隐藏其他视图的文本(React Native)
- react-native - 一旦捆绑 aws-sdk,React Native 图标就会消失
- arrays - 如何在 ruby 中压缩多个数组
- r - 如何计算h点
- rust - 对于特征中的 getter 而言,按值返回是否更好?
- python - 如何修复数据集以返回所需的输出(pytorch)
- xcode - SwiftUI - 使 mac 无法使用
- javascript - 我如何打印逻辑中的最后一个字母
- apache-camel - 是否有任何活跃的 apache camel 社区,如 slack 或任何