kam*_*mil 2 python image-processing python-3.x
我在包含原始像素数据的 4D 数组中拥有近 40000 张图像 - (示例数量、宽度、高度、通道)。每个图像的宽度为 32 像素,高度为 32 像素,以及 3 个 RGB 颜色通道。我想将它们更改为灰度图像(从 rgb 的 3 个通道获得 1 的强度)。我怎么能做得很快?我的代码:
import pickle
import cv2
training_file = "/train.p"
with open(training_file, mode='rb') as f:
train = pickle.load(f)
X_train = train['features']
def rgb2gray(rgb):
r, g, b = rgb[0], rgb[1], rgb[2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
X_train_gray = X_train.copy()
for i in range (X_train_gray.shape[0]):
for j in range (X_train_gray.shape[1]):
for k in range (X_train_gray.shape[2]):
rgb = X_train_gray[i,j,k]
gray = rgb2gray(rgb)
X_train_gray[i,j,k] = gray
print("X_train image data shape =", X_train.shape)
print("X_train_grey image data shape =", X_train_gray.shape)
Run Code Online (Sandbox Code Playgroud)
结果:
X_train_grey image data shape = (40000, 32, 32, 3)
X_train_grey image data shape = (40000, 32, 32, 1)
很好,但是需要很多时间。
我也尝试使用 cv2:
X_train_gray = X_train[0].copy()
print("X_train_grey image data shape =", X_train_gray.shape)
X_train_gray = cv2.cvtColor(X_train_gray, cv2.COLOR_BGR2GRAY)
print("X_train_grey image data shape =", X_train_gray.shape)
Run Code Online (Sandbox Code Playgroud)
结果:
X_train_grey 图像数据形状 = (32, 32, 3)
X_train_grey 图像数据形状 = (32, 32)
但我失去了强度,不知道如何得到它。
那么如何快速将这些图像从 3 通道 rgb 更改为 1 通道灰色?
小智 5
如果你可以使用PIL。应该没问题。我有 RGB 图像并转换它们:
from PIL import Image
img = Image.open("image_file_path") #for example image size : 28x28x3
img1 = img.convert('L') #convert a gray scale
print(img1.size)
>> (28,28)
Run Code Online (Sandbox Code Playgroud)
但是图片没有频道
y = np.expand_dims(img1, axis=-1)
print(y.shape)
>> (28,28,1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18689 次 |
| 最近记录: |