美文网首页
openCV-python(六)图像操作——通道拆分与合并

openCV-python(六)图像操作——通道拆分与合并

作者: 一杯海风_3163 | 来源:发表于2020-05-23 10:30 被阅读0次

关于图像的基本操作中,对图像RGB通道的拆分与合并,本文介绍两种方式,第一种是使用opencv-python,即cv2,第二种使用Pillow即PIL模块。这里要注意的是,Pillow处理图像时,通道顺序为正常的RGB模式,但是opencv处理图像,通道顺序比较特殊,为BGR,所以这里要注意。

1.opencv-python进行图像通道的拆分和合并

代码示例

import cv2
import random
import matplotlib.pyplot as plt

def change_channels(img):
    '''使用opencv-python改变图像通道数'''
    # 分离原来图像的通道
    b,g,r = cv2.split(img)
    #随机打乱顺序
    channel_list = [r, g, b]
    random.shuffle(channel_list)
    # 合并通道
    new_image = cv2.merge(channel_list)

    return new_image

if __name__ == '__main__':

    image = cv2.imread('../myimages/6.jpg')

    # 调用改变通道函数
    new_image = change_channels(image)
    # 将新的图片写在本地
    cv2.imwrite('new_image6.jpg', new_image)

    # 也可以在窗口查看效果
    plt.subplot(121), plt.imshow(image), plt.title('Input')
    plt.subplot(122), plt.imshow(new_image), plt.title('Output')
    plt.show()
运行结果
image.png

2.Pillow进行图像通道的拆分和合并

代码示例
import random
import matplotlib.pyplot as plt
from PIL import Image
'''使用PIL 进行图像通道变换'''
def change_channels(img):
    '''改变图像通道数'''
    # 读取原来图像的通道
    r,g,b = img.split()
    channel_list = [r,g,b]
    # 随机打乱顺序后
    random.shuffle(channel_list)
    # 进行通道合并
    new_image = Image.merge('RGB',tuple(channel_list))
    return new_image




if __name__ == '__main__':
    image = Image.open('../myimages/4.jpg')
    new_image = change_channels(image)
    new_image.save('new_image4.jpg')


    # 也可以在窗口查看效果
    plt.subplot(121), plt.imshow(image), plt.title('Input')
    plt.subplot(122), plt.imshow(new_image), plt.title('Output')
    plt.show()
运行结果
image.png

3.opencv-python+Pillow进行图像通道的拆分和合并(涉及两种图片格式的转换)

代码示例

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


def change_channels(img):
    '''opencv+PIL 改变图像通道数'''
    # 分离原来图像的通道
    # 使用PIL进行通道分离和合并,先将openCV格式转换为PIL.Image
    pil_image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 分离rgb通道
    r, g, b = pil_image.split()
    channel_list = [r, g, b]
    # 随机打乱顺序后
    random.shuffle(channel_list)
    # 进行通道合并
    new_pil_image = Image.merge('RGB', tuple(channel_list))
    # PIL.Image 格式转换为openCV格式
    new_image = cv2.cvtColor(np.asarray(new_pil_image), cv2.COLOR_RGB2BGR)

    return new_image

if __name__ == '__main__':

    image = cv2.imread('../myimages/7.jpg')

    # 调用改变通道函数
    new_image = change_channels(image)
    # 将新的图片写在本地
    cv2.imwrite('new_image7.jpg', new_image)

    # 也可以在窗口查看效果
    plt.subplot(121), plt.imshow(image), plt.title('Input')
    plt.subplot(122), plt.imshow(new_image), plt.title('Output')
    plt.show()


运行结果
image.png

相关文章

网友评论

      本文标题:openCV-python(六)图像操作——通道拆分与合并

      本文链接:https://www.haomeiwen.com/subject/eakkahtx.html