python——数组处理

对于一个matlab程序

I=imread('1.jpg');
figure;imshow(I);

img_gray=rgb2gray(I);%灰度化

% 获取图像的长宽
[m,n]=size(img_gray);

A = reshape(I(:, :, 1), m*n, 1);    % 将RGB分量各转为kmeans使用的数据格式m*n行,一行一样本
B = reshape(I(:, :, 2), m*n, 1);
C = reshape(I(:, :, 3), m*n, 1);
data = [A B C];

要实现相同的功能

import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np

def rgb2gray(rgb):#定义一个转换为灰度图的函数
    return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])


lena = mpimg.imread('D:/MATLABprojects/1.jpg') # 读取和代码处于同一目录下的 lena.png
# # 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
# #lena.shape #(512, 512, 3)
#读取lena图像数据的大小
(m,n,l)=lena.shape
print(m,n,l)

gray = rgb2gray(lena)    
plt.imshow(gray) # 显示图片
plt.axis('off') #不显示坐标轴
plt.show()

# 显示图片的第一个通道
lena_1 = lena[:,:,0]
lena_2=lena[:,:,1]
lena_3=lena[:,:,2]
#将它变为一维的,大小为一行,m*n列
A=lena_1.flatten()
B=lena_2.flatten()
C=lena_3.flatten()
#将一行转换为一列
A=A[:,np.newaxis]
B=B[:,np.newaxis]
C=C[:,np.newaxis]
#将三个矩阵拼接
data=np.hstack((A,B,C))
(x,y)=data.shape
print(x,y)

其中python中矩阵合并、拼接、组合参考https://blog.csdn.net/m0_37602827/article/details/90546621

将行向量转换为列向量https://www.jb51.net/article/175463.htm

你可能感兴趣的:(python,python)