pil图像最⼤值_pythonPIL图像处理
Image读出来的是PIL的类型,⽽skimage.io读出来的数据是numpy格式的
#Image和skimage读图⽚
import Image as img
import os
from matplotlib import pyplot as plot
from skimage import io,transform
img_file1 = img.open('./CXR_png/MCUCXR_0042_0.png')
img_file2 = io.imread('./CXR_png/MCUCXR_0042_0.png')
输出可以看出Img读图⽚的⼤⼩是图⽚的(width, height);⽽skimage的是(height,width, channel), [这也是为什么caffe在单独测试时要要在代码中设置:transformer.set_transpose('data',(2,0,1)),因为caffe可以处理的图⽚的数据格式是(channel,height,width),所以要转换数据]
#读图⽚后数据的⼤⼩:
print "the picture's size: ", img_file1.size
print "the picture's shape: ", img_file2.shape
the picture's size: (4892, 4020)
the picture's shape: (4020, 4892)
#得到像素:
print(pixel((500,1000)), img_file2[500][1000])
print(pixel((500,1000)), img_file2[1000][500])
print(pixel((1000,500)), img_file2[500][1000])
(0, 139)
(0, 0)
(139, 139)
Img读出来的图⽚获得某点像素⽤getpixel((w,h))可以直接返回这个点三个通道的像素值
skimage读出来的图⽚可以直接img_file2[0][0]获得,但是⼀定记住它的格式,并不是你想的(channel,height,width)
在图⽚上⾯加⽂字
#新建绘图对象
draw = ImageDraw.Draw(image),
#获取图像的宽和⾼
width, height = image.size;
#** ImageFont模块**
#设置⽂字颜⾊
fillColor = "#ff0000"
#写⼊⽂字
<((40, height - 100), u'⼴告', font=setFont, fill=fillColor)
作者:刑素素
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,⾮商业转载请注明出处。
图⽚信息
如果我们想知道⼀些skimage图⽚信息
from skimage import io, data
img = data.chelsea()
io.imshow(img)
print(type(img)) #显⽰类型
print(img.shape) #显⽰尺⼨
print(img.shape[0]) #图⽚⾼度
print(img.shape[1]) #图⽚宽度
print(img.shape[2]) #图⽚通道数
print(img.size) #显⽰总像素个数
print(img.max()) #最⼤像素值
print(img.min()) #最⼩像素值
an()) #像素平均值
print(img[0][0])#图像的像素值
PIL image 查看图⽚信息,可⽤如下的⽅法
print type(img)
print img.size #图⽚的尺⼨
de #图⽚的模式
print img.format #图⽚的格式
pixel((0,0)))#得到像素:
#img读出来的图⽚获得某点像素⽤getpixel((w,h))可以直接返回这个点三个通道的像素值# 获取图像的灰度值范围
width = img.size[0]
height = img.size[1]
for i in range(0, width):
for j in range(0, height):
pixel((i, j))>=0 pixel((i, j))<=255:
count +=1
print count
print(height*width)
使⽤python进⾏数字图⽚处理,还得安装Pillow包。虽然python⾥⾯⾃带⼀个PIL(python images library), 但这个库现在已经停⽌更新了,所以使⽤Pillow, 它是由PIL发展⽽来的。
pil能处理的图⽚类型
pil可以处理光栅图⽚(像素数据组成的的块)。
通道
⼀个图⽚可以包含⼀到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进⾏叠加
模式
1 1位像素,⿊和⽩,存成8位的像素
L 8位像素,⿊⽩
P 8位像素,使⽤调⾊板映射到任何其他模式
RGB 3×8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜⾊隔离
YCbCr 3×8位像素,彩⾊视频格式
I 32位整型像素
F 32位浮点型像素
坐标
Pil采取左上⾓为(0,0)的坐标系统
图⽚的打开与显⽰
from PIL import Image
img=Image.open('d:/dog.png')
img.show()
虽然使⽤的是Pillow,但它是由PIL fork⽽来,因此还是要从PIL中进⾏import. 使⽤open()函数来打开图⽚,使⽤show()函数来显⽰图⽚。
这种图⽚显⽰⽅式是调⽤操作系统⾃带的图⽚浏览器来打开图⽚,有些时候这种⽅式不太⽅便,因此我们也可以使⽤另上⼀种⽅式,让程序来绘制图⽚。
from PIL import Image
plt.figure("dog")
plt.figure(num=1, figsize=(8,5),)
plt.title('The image title')
plt.axis('off') # 不显⽰坐标轴
plt.imshow(img)
plt.show()
这种⽅法虽然复杂了些,但推荐使⽤这种⽅法,它使⽤⼀个matplotlib的库来绘制图⽚进⾏显⽰。matplotlib是⼀个专业绘图的库,相当于matlab中的plot,可以设置多个figure,设置figure的标题,甚⾄可以使⽤subplot在⼀个figure中显⽰多张图⽚。matplotlib 可以直接安装.
figure默认是带axis的,如果没有需要,我们可以关掉
plt.axis('off')
图像加标题
plt.title('The image title')
matplotlib标准模式
plt.figure(num=5, figsize=(8,5),)
#plt.figure(num='newimage', figsize=(8,5),)
plt.title('The image title', color='#0000FF')
plt.imshow(lena) # 显⽰图⽚
plt.axis('off') # 不显⽰坐标轴
plt.show()
PIL image 查看图⽚信息,可⽤如下的⽅法
print type(img)
print img.size #图⽚的尺⼨
de #图⽚的模式
print img.format #图⽚的格式
图⽚的保存
img.save('d:/dog.jpg')
就⼀⾏代码,⾮常简单。这⾏代码不仅能保存图⽚,还是转换格式,如本例中,就由原来的png图⽚保存为了jpg图⽚。
图像通道\⼏何变换\裁剪
PIL可以对图像的颜⾊进⾏转换,并⽀持诸如24位彩⾊、8位灰度图和⼆值图等模式,简单的转换可以通过vert(mode)函数完成,其中mode表⽰输出的颜⾊模式,例如''L''表⽰灰度,''1''表⽰⼆值图模式等。但是利⽤convert函数将灰度图转换为⼆值图时,是采⽤固定的阈 值127来实现的,即灰度⾼于127的像素值为1,⽽灰度低于127的像素值为0。
彩⾊图像转灰度图
from PIL import Image
vert('L')
plt.figure("beauty")
plt.imshow(gray,cmap='gray')
plt.axis('off')
plt.title('The color image to gray image')
plt.show()
使⽤函数convert()来进⾏转换,它是图像实例对象的⼀个⽅法,接受⼀个 mode 参数,⽤以指定⼀种⾊彩模式,mode 的取值可以是如下⼏种:
· 1 (1-bit pixels, black and white, stored with one pixel per byte)
· L (8-bit pixels, black and white)
· P (8-bit pixels, mapped to any other mode using a colour palette)
· RGB (3x8-bit pixels, true colour)
· RGBA (4x8-bit pixels, true colour with transparency mask)
· CMYK (4x8-bit pixels, colour separation)
· YCbCr (3x8-bit pixels, colour video format)
· I (32-bit signed integer pixels)
· F (32-bit floating point pixels)
通道分离与合并
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:/ex.jpg') #打开图像
vert('L') #转换成灰度
r,g,b=img.split() #分离三通道
('RGB',(r,g,b)) #合并三通道
plt.figure("beauty")
plt.subplot(2,3,1), plt.title('origin')
plt.imshow(img),plt.axis('off')
plt.subplot(2,3,2), plt.title('gray')
plt.imshow(gray,cmap='gray'),plt.axis('off')
plt.subplot(2,3,3), plt.title('merge')
matplotlib中subplotplt.imshow(pic),plt.axis('off')
plt.subplot(2,3,4), plt.title('r')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论