使用OpenCV将RGB图像分为红色和绿色蓝色分量,并使用这些分量进行操作

时间:2019-05-01 01:11:48

标签: python numpy opencv matplotlib

我需要有关OpenCV和Python的帮助。

如何使用OpenCV和Python分离RGB图像的绿色,红色和蓝色分量?为了与它们一起使用,我还需要将每个矩阵细分为8x8子矩阵,为此,我正在考虑使用numpy。

到目前为止,我的代码是以下代码,但是我仍然坚持这样做,我不确定它是否正确。

import matplotlib.pyplot as plt
import cv2
import numpy as np

img = cv2.imread("4.jpg")
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

divb = np.split(b,8)  # divide b in submatrices 8x8?
divg = np.split(g,8)  # divide g in submatrices 8x8?
divr = np.split(r,8)  # divide r in submatrices 8x8?

print('blue:', b)
print('red:', g)
print('green:', r)

cv2.imshow('img',img)

1 个答案:

答案 0 :(得分:0)

不幸的是,没有内置的numpy方法将矩阵拆分成8 x 8的子矩阵。此外,我处理该问题的主要假设是,将填充图像,以使图像的宽度和高度的尺寸为8的倍数。我认为您肯定在正确的轨道上:

img = cv2.imread("4.jpg")
b,g,r = cv2.split(img)

def sub_matrices(color_channel):
    matrices = []
    #How can you change how this loop iterates?
    #Also consider adding stopping conditions and/or additional loops for
    #excess parts of the image.
    for i in range(int(color_channel.shape[0]/8)):
        for j in range(int(color_channel.shape[1]/8)):
            matrices.append(color_channel[i*8:i*8 + 8, j*8:j*8+8])
    return matrices

#returns list of sub matrices
r_submatrices = sub_matrices(r)

代码应该很容易解释。就像我说的那样,如果未填充图像的尺寸以使尺寸为8,则图像的部分将不在任何子矩阵中(对于此代码,尤其是;请根据需要进行更改)。当然,可以对任何大小的子矩阵进行优化(查找缓存块)并对其进行更改(我将在练习中留给您使用)。希望这会有所帮助。