• 获取图像的属性、图像通道拆分合并实现


    图像的属性包括图像的高度、宽度、通道数、位深度等信息,这些属性可以帮助我们了解图像的基本特征。而图像的通道拆分和合并则是对图像的颜色通道进行操作,可以用于提取、修改或合成图像的不同颜色信息。

    首先,让我们来介绍图像的属性。图像的高度和宽度表示了图像的空间尺寸,即图像的像素行数和列数。通过获取图像的高度和宽度,我们可以了解图像的大小和纵横比。图像的通道数表示了图像的颜色通道数量,常见的为灰度图像(单通道)和彩色图像(三通道)。每个像素点的位深度表示了图像中每个通道的颜色表示精度,一般为8位(0-255),也可以是16位或其他深度。

    接下来,我们将介绍图像的通道拆分和合并。通道拆分是将彩色图像的各个颜色通道分离成独立的图像,以便单独处理每个颜色通道。例如,在RGB图像中,将红色通道、绿色通道和蓝色通道拆分可以得到三个独立的图像。这样我们就可以对每个通道进行单独的处理,如增强红色效果、调整绿色饱和度等。

    通道的合并是将多个图像的颜色通道按照指定顺序合并成一个多通道图像。通过合并图像的通道,我们可以实现图像的叠加、合成等操作。以RGB通道为例,将一张经过处理的红色通道图像、绿色通道图像和蓝色通道图像合并,就可以恢复到原始的彩色图像。

    通道拆分和合并操作在图像处理中应用广泛。例如,在图像分割任务中,我们可以通过通道拆分提取感兴趣区域的颜色信息,然后对其进行处理。在图像融合中,我们可以通过通道合并将不同图像的指定通道进行合成,实现特定的效果。此外,通道拆分和合并操作也是深度学习中图像数据的预处理步骤之一,用于将图像转换为神经网络可接受的输入格式。

    综上所述,图像的属性包括图像的高度、宽度、通道数和位深度等信息,这些属性可以帮助我们了解图像的基本特征。图像的通道拆分和合并操作可以用于对图像的颜色通道进行分离和合成,以实现各种图像处理任务。通道拆分和合并是图像处理中常用的操作之一,应用广泛且具有重要的意义。

    获取图像的属性

    在这里插入图片描述

    import numpy as np
    import cv2 as cv
    import matplotlib.pyplot as plt
    
    #绘制一个全黑的图像
    img = np.zeros((256,256,3),np.uint8)   #创建图像时要指定类型为uint8
    plt.imshow(img[:,:,::-1])
    plt.show()
    
    #等待用户按任意键推出
    cv.waitKey(0)
    cv.destroyAllWindows()
    
    a=img[100,100]     #这里应该使用方括号 [] 来索引图像像素值,而不是使用圆括号
    print(a)  #[0 0 0]
    
    
    '''在获取图像的形状、大小和数据类型时,需要使用函数   而不是方法()。  所以不需要加()'''
    
    
    b=img.shape
    print(b)   #(256, 256, 3)
    
    
    #获取图像大小
    c=img.size
    print(c)   #196608   =   256*256*3
    
    #获取数据类型
    d = img.dtype
    print(d)    #uint8
    
    • 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

    图像通道拆分

    在这里插入图片描述

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    img = cv2.imread("lena.png")
    
    cv2.imshow("img1",img)
    cv2.waitKey(0)
    
    
    '''在拆分通道部分,使用 cv2.split() 函数将图像拆分成 B、G、R 三个通道,
    每个通道都是一个独立的灰度图像。注意 cv2.split() 返回的是列表,因此需要使用多个变量接收。'''
    #拆分通道
    b,g,r = cv2.split(img)
    
    # 显示蓝色通道图像
    cv2.imshow("Blue Channel", b)
    cv2.waitKey(0)
    
    # 显示绿色通道图像
    cv2.imshow("Green Channel", g)
    cv2.waitKey(0)
    
    # 显示红色通道图像
    cv2.imshow("Red Channel", r)
    cv2.waitKey(0)
    
    '''在合并通道部分,使用 cv2.merge() 函数将三个通道重新合并为一张彩色图像。
    合并时需要将通道作为列表传递给 cv2.merge() 函数。'''
    
    
    #合并通道
    img_merge=cv2.merge([b,g,r])
    
    cv2.imshow('img2',img_merge)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 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

    效果展示

    原图:
    在这里插入图片描述
    拆分:
    在这里插入图片描述
    合并:
    在这里插入图片描述
    注意事项:

    获取图像的属性:

    图像尺寸:可以使用img.shape来获取图像的尺寸信息,返回一个元组(高度,宽度)。
    图像通道数:可以使用img.shape[2]来获取图像的通道数信息,对于彩色图像通常为3(红、绿、蓝),对于灰度图像通常为1。
    图像数据类型:可以使用img.dtype来获取图像的数据类型,例如uint8表示无符号8位整数,float32表示32位浮点数。
    图像总像素数:可以通过图像的尺寸计算得到,即img.shape[0] * img.shape[1]。
    图像像素深度:根据图像的数据类型可以得知,例如uint8数据类型表示像素值范围为0-255。
    图像通道拆分:

    对于彩色图像,可以使用cv2.split(img)来将图像的三个通道拆分成单独的图像。
    对于拆分后的单通道图像,可以使用cv2.merge([r_channel, g_channel, b_channel])来将它们合并为彩色图像。
    注意事项:

    在进行图像属性获取和通道拆分时,需要确保图像已经成功加载并存储在内存中。
    需要注意图像的数据类型,以及使用合适的函数来获取相应的属性。不同的数据类型可能会有不同的取值范围和处理方式。
    在进行图像通道拆分时,需要确保图像是彩色图像且通道数为3,否则将无法拆分。
    在进行图像通道拆分后,得到的单通道图像需要确保数据类型和像素值范围与原图像一致,避免出现数据截断或溢出的问题。
    在图像通道拆分后,如果对单通道图像进行修改,需要记得重新进行通道合并,并确保通道顺序正确。
    总结:
    获取图像的属性和进行图像通道拆分是图像处理中常用的操作。通过获取图像的尺寸、通道数、数据类型等属性信息,可以更好地理解和处理图像。通过图像通道拆分,可以对每个通道进行独立处理或分析。在实际应用中,需要注意图像的加载和存储、数据类型的处理、通道拆分合并的正确性,以及对单通道图像的修改后的处理等事项。这些注意事项有助于您高效、准确地进行图像处理操作。

  • 相关阅读:
    通信信号处理中的调制识别技术及其基于C++ Qt的实现
    开放科学背景下的科学数据开放共享:国家青藏高原科学数据中心的实践
    【Linux】内核文件系统系统调用流程摸索
    【大数据】基于 Flink CDC 高效构建入湖通道
    “蛇形”方阵的构造
    壁纸小程序Vue3(分类页面和用户页面基础布局)
    SuperMap iClient for JavaScript如何获取字段别名
    百万并发设计
    socket简介
    脂肪 、肥胖与健康
  • 原文地址:https://blog.csdn.net/qq_53545309/article/details/132719174