opencv和matplotlib库图像读写显示对比和总结

wangdaren 2020-03-27

图片格式:

  • bmp
    • 全称:Bitmap
    • 不压缩
  • png
    • 全称:Portable Network Graphics
    • 无损压缩
  • jpg
    • 全称:Joint Photographic Experts Group
    • 有损压缩

opencv(python)中图像读写显示:

import cv2 as cv

new_img = cv.imread(‘baby.png‘) # 文件大小:362KB

# bmp
cv.imwrite(‘img_bmp.bmp‘,new_img) # 文件大小:768KB

# jpg 默认95%质量
cv.imwrite(‘img_jpg95.jpg‘,new_img) # 文件大小:90.7KB
# jpg 20%质量
cv.imwrite(‘img_jpg20.jpg‘,new_img,[int(cv.IMWRITE_JPEG_QUALITY),20]) # 文件大小:13.2KB
# jpg 100%质量
cv.imwrite(‘img_jpg100.jpg‘,new_img,[int(cv.IMWRITE_JPEG_QUALITY),100]) # 文件大小:183KB

# png 默认1压缩比
cv.imwrite(‘img_png1.png‘,new_img) # 文件大小:431KB
# png 9压缩比
cv.imwrite(‘img_png9.png‘,new_img,[int(cv.IMWRITE_PNG_COMPRESSION),9]) # 文件大小:366KB

cv.imshow(‘result‘,new_img)

cv.waitKey(0)
cv.destroyAllWindows()

Matplotlib库中图像读写显示

Matplotlib是Python的一个很常用的绘图库。OpenCV中的图像是以BGR的通道顺序存储的,但Matplotlib是以RGB模式显示的,所以直接在Matplotlib中显示OpenCV图像会出现问题,因此需要转换一下。

# Writer : 
# Date   : 2020.3.27
import cv2 as cv 
import matplotlib.pyplot as plt

# img = pli.imread(‘baby.png‘)

img = cv.imread(‘baby.png‘)
# 图像复制 + BGR->RGB
img2 = img[:, :, ::-1]
# or
# img2 = cv.cvtColor(img, cv.COLOR_BGR2RGB)

plt.figure(1)

# 显示不正确的图
plt.subplot(121)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.axis(‘off‘) # 去图像边框
plt.title(‘False Channel Show‘)
plt.imshow(img)

# 显示正确的图
plt.subplot(122)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.axis(‘off‘) # 去图像边框
plt.title(‘Right Channel Show‘)
plt.imshow(img2)

plt.savefig(‘baby_true.jpg‘) # 在show前面保存图像
plt.show()

实验输出:

opencv和matplotlib库图像读写显示对比和总结

相关推荐