Skip to content

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

python
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)

使用封装函数显示图像

shell
# 兼容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()方法就能显示图片了,相比调用系统看图文件看图方便多啦!