将RGB图像分割为R,G,B通道 - python

var*_*lla 4 python rgb image-processing

我正在进行图像处理,我想知道这段代码是否会将彩色图像分成不同的通道,并给我平均值.因为当我尝试给我的图像我正在阅读时,它给了我蓝色,绿色,红色的值,以及平均值.当我尝试将其附加到列表中并尝试打印时,该列表仅包含零.

这是我的代码:

b, g, r = cv2.split(re_img1)
ttl = re_img1.size
B = sum(b) / ttl
G = sum(g) / ttl
R = sum(r) / ttl
B_mean1.append(B)
G_mean1.append(G)
R_mean1.append(R)
Run Code Online (Sandbox Code Playgroud)

re_img1是调整大小的图像(即256x256).图像可以是任何东西.我在2个不同的功能中使用相同的代码,我面临同样的问题.

欢迎任何建议!提前致谢!

Rao*_*oul 6

如果我理解你,你正试图计算每个RGB通道的平均值.您的代码中有2个问题:

  1. ttl应该除以3,如下所示,否则就是X通道的像素数(例如:256X256 RGB,即196608)
  2. 你的代码中的b,g和r实际上是numpy.ndarray类型,所以你应该使用适当的方法来操作它们, ndarray.sum.将总和设为浮点数,否则将丢失小数,因为2个整数的商将给出一个int.

    import cv2
    import numpy as np
    re_img1 = cv2.imread('re_img1.png')
    b, g, r = cv2.split(re_img1)
    
    ttl = re_img1.size / 3 #divide by 3 to get the number of image PIXELS
    
    """b, g, and r are actually numpy.ndarray types,
    so you need to use the appropriate method to sum
    all array elements"""
    B = float(np.sum(b)) / ttl #convert to float, as B, G, and R will otherwise be int
    G = float(np.sum(g)) / ttl
    R = float(np.sum(r)) / ttl
    B_mean1 = list()
    G_mean1 = list()
    R_mean1 = list()
    B_mean1.append(B)
    G_mean1.append(G)
    R_mean1.append(R)
    
    Run Code Online (Sandbox Code Playgroud)

希望这对你有用.干杯!