图像处理导入模块和封装好的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import numpy as np


import matplotlib.pyplot as plt

# 修复pyplot的中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']

# 调整全局图表大小
# print("默认图片大小是 ", plt.rcParams["figure.figsize"]) # (4, 8)
# plt.rcParams["figure.figsize"] = (4, 8)
# print("修改后默认图片大小是", plt.rcParams["figure.figsize"]) # (a, b),以上面那行为准



from PIL import Image
import cv2 as cv

# 为opencv和PIL提供的图片显示方式,可选参数为标题title,使用matplotlib的方式显示图片,会在cell格下生成一个图标
def show(img, title='null'):
# 如果是数组类型,就按照opencv的步骤显示图片
if type(img) == np.ndarray:
if img.ndim == 2:
plt.imshow(img,cmap='gray')
else :
plt.imshow(cv.cvtColor(img,cv.COLOR_BGR2RGB)) # opencv的通道顺序为[B,G,R],而matplotlib通道顺序为[R,G,B],需要调换一下
#如果不是数组类型,就按照PIL的步骤显示图片
# img.show() PIL推荐的方法,会使用系统自带的看图软件打开
else:
img_ndim = len(np.array(img).shape)
if img_ndim == 3:
plt.imshow(img) # PIL格式图片不需要进行BGR2RGB转换
elif img_ndim == 2:
plt.imshow(img, cmap='gray')
else:
print("PIL类型图片的维度异常,维度:",img_ndim)
if title != 'null':
plt.title(title, fontsize=18)
plt.show()

# 为opencv提供的图片显示方式,标题为可选选参数,会打开一个尺寸和原图一样的系统窗口
# bug: windwos下正常,macos下会卡死
def show_cv(img, title='123'):
cv.namedWindow(title,flags=cv.WINDOW_NORMAL)
h,w,r = img2.shape
cv.resizeWindow(title,w,h)
cv.imshow(title,img)
cv.waitKey(0)
cv.destroyAllWindows()
_ = cv.waitKey(1)

使用封装函数显示图像

1
2
3
4
5
# 兼容PIL和opencv的导入
img1 = Image.open('pic/8.jpg')
img2 = cv.imread('pic/9.jpg')
show(img1,'悉尼歌剧院')
show(img2,'tiger')

实际使用

  1. 在jupter中新建一个notebook

  2. 导入一下模块和函数

    image-20220926162112262
  3. 再使用PIL和opencv加载两张不同的图片,成功了!只需要调用show()方法就能显示图片了,相比调用系统看图文件看图方便多啦!