我想知道有什么办法可以将RGB图像转换成像素向量而不会丢失python中的空间信息。据我所知,我可以读取图像,并将图像转换为像素向量。我不确定这样做是否仍然保留图像的空间信息的像素向量。从RGB图像生成像素向量时,我如何实现这一点?
我的尝试
我试了一下,但我不知道怎么做
import matplotlib.pyplot as pl
image = plt.imread('dog.jpg')
im = image/255.0
print(im.shape) #(32, 32, 3)
pixels = im.reshape(im.shape[0]*im.shape[1], im.shape[2])但是,我想确定如何从RGB图像中生成像素向量,而不丢失像素顺序及其空间信息。怎样才能做到这一点?有什么想法吗?
我想也许numpy可能有一些功能来完成这个任务。有人能告诉我如何用numpy来完成这个任务吗?
图形插图
下面是从RGB图像生成像素向量的简单图形说明:

如图所示,我们有形状为(4,4,3)的RGB图像,需要在不丢失其空间信息和像素顺序的情况下生成像素向量,然后将来自每个通道(红色、绿色、蓝色)的像素向量组合成像素矩阵或数据。我很好奇如何在python中完成这个任务?
目标
我想从RGB图像中生成像素向量,因此需要用taylor展开来扩展像素向量。有人能告诉我怎么做到这一点吗?
发布于 2020-07-06 21:39:51
你只是想把每条通道重塑成一个向量,然后水平地加入它们吗?这就是我从图表中了解到的,我的做法是这样的:
import matplotlib.pyplot as plt
import numpy as np
image = plt.imread('monkey.png')
image = image / 255.0
red = image[:,:,0]
green = image[:,:,1]
blue = image[:,:,2]
def to_vector(matrix):
result = []
for i in range(matrix.shape[1]):
result = np.vstack(matrix[:,i])
return result
red = to_vector(red)
green = to_vector(green)
blue = to_vector(blue)
vector = np.hstack((red,green,blue))发布于 2020-07-06 22:23:39
你最初的尝试几乎是一个完整的解决方案--也许实际上是一个完整的解决方案,具体取决于想法是什么。
print(im.shape) #(32, 32, 3)
pixels = im.reshape(im.shape[0]*im.shape[1], im.shape[2]) # this is exactly correct
print(pixels.shape) #(1024,3)
reds = pixels[:, 0] #just as an example for where things end up in the result
pixels_channelfirst = np.moveaxis(pixels, 1, 0) # if you want the first axis to be channels
print(pixels.shape) #(3, 1024)
reds = pixels[0, :]“我想保存它的像素顺序和空间信息”--这已经做到了!如果你有疑问的话,把一个非零像素添加到一个零图像中,并绘制出它要去的地方。另一个答案中的np.hstack也是如此。
https://stackoverflow.com/questions/62764560
复制相似问题