python读图像函数 python图像处理( 二 )


if len(parsed.scheme)1:
ext = 'png'
else:
basename, ext = os.path.splitext(fname)
ext = ext.lower()[1:]
elif hasattr(fname, 'name'):
basename, ext = os.path.splitext(fname.name)
ext = ext.lower()[1:]
else:
ext = 'png'
else:
ext = format
if ext not in handlers:
im = pilread(fname)
if im is None:
raise ValueError('Only know how to handle extensions: %s; '
'with Pillow installed matplotlib can handle '
'more images' % list(six.iterkeys(handlers)))
return im
声明的处理器只有 png 。如果是 png 文件,调用 _png.read_png 。如果不是 png 直接使用 pilread(就是用 pil 的 Image.open 然后 pil_to_array) 。
matplotlib 的源码确实比较复杂,一大部分主体是用 C 写的,改动很激进,功能更新猛烈 。
读取图片python基础——读取图片
图像后缀名的转换:
要注意的是:对于彩色图像,不管其格式是png , 还是bmp,或者jpg,
在PIL中 ,使用Image模块的open()函数打开后,返回的图像对象的模式都是 RGB  , 对于灰度图像,不管其图像格式是PNG,还是BMP,JPG , 打开后,其模式为灰度L 。
PNG BMP JPG彩色图像格式之间的转换:可以通过Image模块的open函数和save函数,具体来说 , 在打开这些图像时,PIL会将他们解码成三通道的RGB图像 。用户可以基于RGB进行处理 。处理完毕后可以将其处理结果保存成PNG BMP JPG中任何格式 。
PNG BMP JPG灰度图像格式之间的转换,同理也可以通过类似途径,只是解码后时模式为L的图像 。
python库可以用来读取图片的库
1. PIL.Image.open
无论是jpg还是png都能准确读取 , PIL.Image.open 不直接返回numpy对象,可以用numpy提供的函数进行转换;
其他模块都直接返回numpy.ndarray对象,通道顺序为RGB,通道值得默认范围为0-255 。
拓展:
利用PIL中的Image函数读取出来不是array格式 , 这时候需要用np.asarray() 或者np.array()函数。
区别:np.array() 是深拷贝,np.asarray() 是浅拷贝
关于深拷贝和浅拷贝 , 这里给出一个说明:
Python 中的对象之间赋值时是按引用传递的 , 如果需要拷贝对象,需要使用标准库中的copy模块 。
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象 。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
一个很好的例子:
2.cv2.imread
使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR , 通道值默认范围0-255
cv2.imread():读入图片,共两个参数:第一个参数为要读入的图片文件名,第二个参数为如何读取图片(cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:灰度图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道 。)
cv2.imread()不能有中文路径,否则读取不出来
cv2.imread() 读出来同样是array形式 , 但是如果是单通道的图,读出来的是三通道的 。
3.matplotlib.image.imread
用于显示图片matplotlib 用于读取图片并且读取出来就是array格式
解决使用plt.savefig 保存图片时一片空白: 在plt.show() 之前调用 plt.savefig();
4.scipy.ndimage.imread
scipy.ndimage.imread(*args, **kwds)Use ``matplotlib.pyplot.imread`` instead.
Returns:imread:ndarray(多维数组)
5.scipy.misc.imread
scipy.misc.imread(name, flatten=False, mode=None)
Use ``imageio.imread`` instead.
返回:imread: ndarray 。通过读取图像获得的阵列。读出来是array 形式 , 并且按照(H,W,C)形式保存

推荐阅读