按获得的平均值对矩阵进行排序

时间:2019-05-01 17:41:08

标签: python numpy opencv

我正在使用OpenCV和Python。

我用OpenCV和Python分离了RGB图像的绿色,红色和蓝色部分。然后将每个矩阵细分为8x8子矩阵以便使用它们。到目前为止,这已经完成。

对于它生成的每个8x8子矩阵,我需要获取每个子矩阵的均值,并根据获得的均值对矩阵进行降序排列。我被困在这。我需要帮助。

到目前为止,我的代码如下

import cv2
import numpy as np 

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

def sub_matrices(color_channel):
    matrices = []

    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)
g_submatrices = sub_matrices(g)
b_submatrices = sub_matrices(b)

print (r_submatrices)
print (g_submatrices)
print (b_submatrices)

for i in r_submatrices:

    x = np.mean(i)

    print(i)

我正在使用numpy来获取均值,但是然后我不太了解如何根据我在均值中得到的值来对这些矩阵进行排序?

1 个答案:

答案 0 :(得分:1)

最简单的方法是计算所有均值,将均值和矩阵成对保存(可以使用一个元组),然后进行排序。

matrix_mean_list = []
for i in r_submatrices:
    x = np.mean(i)
    matrix_mean_list.append((i, x))

matrix_mean_list = sorted(matrix_mean_list, key=lambda m: m[1])

现在matrix_mean_list应该按照均值进行排序。您可以对其进行迭代以返回矩阵。