更多优质内容
请关注公众号

python图像处理基础之PIL和opencv-张柏沛IT博客

正文内容

python图像处理基础之PIL和opencv

栏目:Python 系列: 发布时间:2019-12-16 14:49 浏览量:2680

python图像处理基础


pip install pillow 

安装PIL库

1.读取图片

from PIL import Image
import numpy as np
#打开图片
img = Image.open("../material/img2.jpg")

#打开图片并转为灰度图
img2 = Image.open("../material/img2.jpg").convert("L")

print(img2)   #img和img2是一个PIL对象
print(np.array(img2))  #也可以通过numpy.array()转为数组

#显示图片
img.show()
img2.show()


2.图片缩放,裁剪和旋转

from PIL import Image

img = Image.open("../material/img2.jpg")

#获取图片宽高 (宽,高) 单位像素
w,h = img.size

#图片缩放
img2 = img.resize((int(w/2),int(h/2)))    #传入的宽高要是整型的才行,浮点型会报错
img3 = img.resize((int(w*2),int(h*2)))

img2.show()
# img3.show()

img.save("小姐姐图片.jpg")   #图片另存为
img2.save("小姐姐图片(缩略图).jpg")


from PIL import Image

img = Image.open("../material/img2.jpg")

#获取图片宽高 (宽,高) 单位像素
w,h = img.size

#图片裁剪
box = (150,350,400,600)  #以(150,350)这个点作为左上角,(400,600)作为右上角
img2 = img.crop(box)

# img2.show()

#图片旋转
# img3 = img2.transpose(Image.ROTATE_90)   #逆时针转90度
img3 = img2.rotate(90)  #逆时针转90度
img3.show()


3.图片另存为
imgObj.save("文件名",quality=75, subsampling=0)
quality是保存图像质量的参数,默认是75,所以另存为的图片宽高没变,但是大小会缩小,大概之后几十K

如果想保证图像质量可以调到90~95之间

subsampling=0 也是保证图像的质量

将图片数据化

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

img = Image.open("../material/img2.jpg").convert("L")

#将图片转为numpy数组
img_arr = np.array(img)
print(img_arr[:50])

#图片的像素大小为(600.900), 其数组的shape为(900,600),一维有900个元素,二维600个
print(img_arr.shape)    # 每一个值都在0~255之间,代表颜色rgb

fig = plt.figure()
ax1 = fig.add_subplot(121)
plt.gray()   #不使用颜色,下面描绘的图像会变成黑白轮廓,否则是有颜色的
ax1.contour(img_arr,origin="image")    #描绘图像轮廓
plt.axis("equal")

#描绘直方图
ax2 = fig.add_subplot(122)
#将二维数组展开成一维,并绘制成128条柱体的直方图来显示数据的分布情况,这里显示的就是rgb的分布情况
ax2.hist(img_arr.flatten(),128)   # 横轴数据是0~255,即img_arr中的数据值,纵轴是该条柱代表的数据出现的频数(次数),因为数据值是0~255,柱体数是128,所以,一条柱体代表2个数据值;如果使用density=1则纵轴显示的是频率;

plt.tight_layout()  #设置默认间距,这样子图之间的距离会自动调节,不会出现坐标轴数据太长挡到另一个子图的情况
plt.show()

​​​​​​​

将图片数据化


使用opencv操作图片

安装opencv
pip install opencv-python -i https://pypi.doubanio.com/simple

-i 后面的表示使用国内镜像

1.读取和保存图片:
im = cv2.imread("文件名")
cv2.imwrite("文件名",im)

其中imread()返回的是一个numpy数组

在opencv中,图像不是按传统的RGB通道,而是按BGR顺序(RGB反序)存储的,读取图片时默认是BGR,可以通过cvtColor() 将颜色空间转换为灰度图或者RGB

转换代码如下:
cv2.COLOR_BGR2GRAY
cv2.COLOR_BGR2RGB
cv2.COLOR_GRAY2BGR

import cv2

im = cv2.imread(r"../material/img2.jpg")

print(im)
print(im.shape)  #返回的是一个三维数组(900,600,3),其通道数是3

# 转为灰度图片,灰度图片的通道数是1,也就是一个二维数组
im2 = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
print(im2)
print(im2.shape)


2.使用matplotlib显示opencv的图片

import cv2
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']

im = cv2.imread(r"../material/img2.jpg")

gray_im = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
rgb_im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

plt.subplot(221)
plt.imshow(rgb_im)  #作图,imshow() 接受的是一个numpy数组或者其他对象
plt.title("rgb图像(原图)")

plt.subplot(222)
plt.imshow(gray_im)
plt.title("灰度图像")

plt.subplot(223)
plt.imshow(im)
plt.title("bgr图像")

plt.tight_layout()
plt.show()  #显示





更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > python图像处理基础之PIL和opencv

热门推荐
推荐新闻