pbu*_*pbu 39 python png numpy image
我有大约200个灰度PNG图像存储在这样的目录中.
1.png
2.png
3.png
...
...
200.png
Run Code Online (Sandbox Code Playgroud)
我想将所有PNG图像导入Numpy然后想要应用k-means来使用k-means(scikit)生成补丁字典
有没有人知道一个python库可以将这些图像加载到numpy中?
Cha*_*les 55
派对迟到了,但目前的答案现已弃用.
根据doc,scipy.misc.imread不推荐使用SciPy 1.0.0,并将在1.2.0中删除.考虑imageio.imread改用.
例:
import imageio
im = imageio.imread('my_image.png')
print(im.shape)
Run Code Online (Sandbox Code Playgroud)
您还可以使用imageio从花哨的资源加载:
im = imageio.imread('http://upload.wikimedia.org/wikipedia/commons/d/de/Wikipedia_Logo_1.0.png')
Run Code Online (Sandbox Code Playgroud)
编辑:
要加载*.png特定文件夹中的所有文件,您可以使用该glob包:
import imageio
import glob
for im_path in glob.glob("path/to/folder/*.png"):
im = imageio.imread(im_path)
print(im.shape)
# do whatever with the image here
Run Code Online (Sandbox Code Playgroud)
spo*_*rcc 28
使用scipy,glob和PIL安装(pip install pillow)你可以使用scipy的imread方法:
from scipy import misc
import glob
for image_path in glob.glob("/home/adam/*.png"):
image = misc.imread(image_path)
print image.shape
print image.dtype
Run Code Online (Sandbox Code Playgroud)
根据doc,scipy.misc.imread不推荐使用SciPy 1.0.0,并将在1.2.0中删除.考虑使用imageio.imread instead.查看查尔斯的答案.
Nir*_*Nir 11
最好使用(非常)常用的包:
import matplotlib.pyplot as plt
im = plt.imread('image.png')
Run Code Online (Sandbox Code Playgroud)
这也可以通过PIL库的Image类来完成:
from PIL import Image
import numpy as np
im_frame = Image.open(path_to_file + 'file.png')
np_frame = np.array(im_frame.getdata())
Run Code Online (Sandbox Code Playgroud)
如果您正在加载图片,你可能要与一个或两个的合作matplotlib和opencv操纵和查看图像。
出于这个原因,我倾向于使用他们的图像阅读器并将它们附加到列表中,我从中制作了一个 NumPy 数组。
import os
import matplotlib.pyplot as plt
import cv2
import numpy as np
# Get the file paths
im_files = os.listdir('path/to/files/')
# imagine we only want to load PNG files (or JPEG or whatever...)
EXTENSION = '.png'
# Load using matplotlib
images_plt = [plt.imread(f) for f in im_files if f.endswith(EXTENSION)]
# convert your lists into a numpy array of size (N, H, W, C)
images = np.array(images_plt)
# Load using opencv
images_cv = [cv2.imread(f) for f in im_files if f.endswith(EXTENSION)]
# convert your lists into a numpy array of size (N, C, H, W)
images = np.array(images_cv)
Run Code Online (Sandbox Code Playgroud)
唯一需要注意的区别如下:
因此,大小为 256*256 的单个图像将使用 opencv 生成大小为 (3, 256, 256) 的矩阵,使用 matplotlib 生成大小为 (256, 256, 3) 的矩阵。
要读取一张图像:
import PIL.Image
im = PIL.Image.open('path/to/your/image')
im = np.array(im)
Run Code Online (Sandbox Code Playgroud)
迭代读取多个图像。
这个答案与此类似,但更简单(不需要.getdata())。
| 归档时间: |
|
| 查看次数: |
66341 次 |
| 最近记录: |