zoukankan      html  css  js  c++  java
  • python-改变图片通道排列

     1 '''  PIL 中的convert() 也有着改变通道排列的效果,期待之后补充'''
     2 
     3 import cv2
     4 from PIL import Image
     5 import numpy as np
     6 import matplotlib.pyplot as plt
     7 
     8 
     9 
    10 img_path = '../data/a.jpg'
    11 print("="*15,"Image.open() 读取图像","="*15)
    12 img = Image.open(img_path)
    13 print("Image.open() 读取图片,type(img) :",type(img))    # <class 'PIL.JpegImagePlugin.JpegImageFile'>
    14 print("Image.open() 读取图片,img.size (没有shape属性) :",img.size)   # (328, 260)
    15 print("Image.open() 读取图片,img.mode :",img.mode)      # RGB
    16 # Image.open() 读取图片,没有shape属性,只有size(高,宽)
    17 plt.subplot(221)
    18 plt.imshow(img)
    19 
    20 print("="*15,"cv2.imread() 读取图像","="*15)
    21 img_cv2 = cv2.imread(img_path)
    22 print("cv2.imread() 读取图片, type(img_cv2):", type(img_cv2))       # <class 'numpy.ndarray'>
    23 print("cv2.imread() 读取图片(高,宽,通道(B,G,R)):",img_cv2.shape)   # (260, 328, 3)
    24 # 将通道的排列放在宽高之前
    25 img = np.transpose(img_cv2, (2,0,1))
    26 print("通过np.transpose 函数将通道放在宽高之前: ",img.shape)           # (3, 260, 328)
    27 
    28 # 显示原图(BGR排序),OpenCV 默认读取图片的数据为 (高,宽,通道(B,G,R))
    29 plt.subplot(223)
    30 plt.imshow(img_cv2)
    31 # 尝试转换通道排列顺序,并显示转换后图像(RGB)
    32 img_RGB = img_cv2[:,:,(2,1,0)]  # 改变通道的排列顺序
    33 plt.subplot(224)
    34 plt.imshow(img_RGB)
    35 
    36 img_RGB2 = img_cv2[:,:,::-1]    # 可以实现与上一行代码相同的效果
    37 plt.subplot(222)
    38 plt.imshow(img_RGB2)
    39 print("OpenCV 默认读入图片颜色通道排列为 BGR,可以通过 img_RGB = img_cv2[:,:,(2,1,0)] 或 img_RGB2 = img_cv2[:,:,::-1]  将颜色通道排列改为 RGB")
    40 
    41 plt.show()
    42 
    43 ''' 运行结果:
    44 =============== Image.open() 读取图像 ===============
    45 Image.open() 读取图片,type(img) : <class 'PIL.JpegImagePlugin.JpegImageFile'>
    46 Image.open() 读取图片,img.size (没有shape属性) : (328, 260)
    47 Image.open() 读取图片,img.mode : RGB
    48 =============== cv2.imread() 读取图像 ===============
    49 cv2.imread() 读取图片, type(img_cv2): <class 'numpy.ndarray'>
    50 cv2.imread() 读取图片(高,宽,通道(B,G,R)): (260, 328, 3)
    51 通过np.transpose 函数将通道放在宽高之前:  (3, 260, 328)
    52 OpenCV 默认读入图片颜色通道排列为 BGR,可以通过 img_RGB = img_cv2[:,:,(2,1,0)] 或 img_RGB2 = img_cv2[:,:,::-1]  将颜色通道排列改为 RGB
    53 '''
  • 相关阅读:
    iOS 图片加载
    viewController 生命周期 转
    @import和@class的区别
    git 使用总结
    iOS开发 关于property的简单总结
    Swift-6-函数
    Swift-5-流程控制
    Swift-4-数组和字典
    Swift-3-字符串和字符
    Swift-2-基本操作符
  • 原文地址:https://www.cnblogs.com/lyj0123/p/13442810.html
Copyright © 2011-2022 走看看