首页 > 解决方案 > 通过整个目录将 RGB 值重新排列为 GRB、GBR、BRG、BGR 和 RBG

问题描述

我有一个 CNN 的图像目录。我希望能够以不同的顺序重新排列每个波段,以帮助更好地训练我的模型以使其能够识别我的对象。到目前为止,我有一些使用 cv2 的代码。它正在分离乐队,但我在重新安排乐队时遇到了麻烦。

import cv2
import numpy

img = cv2.imread("IMG_4540.jpg")
g,b,r = cv2.split(img)
cv2.imwrite('green_channel.jpg', g)

如果可能的话,我希望有 6 个单独的图像,它们都具有来自一个单一图像的不同波段组合。

标签: imagepython-2.7numpycv2

解决方案


您可以使用 numpy 的索引功能形成所有重新排序。

import numpy as np 
from itertools import permutations
# first generate all sets of rearrangements you'd like to make.. 
orderings = [p for p in permutations(np.arange(3)) if p!=(0,1,2)]
# [(0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
# rbg, brg, and so on. 

# then reorder along axis=-1 using these. (0,1,2) --> (0,2,1) and so on. 
for order in orderings:
    reordered = im[...,order]
    # then save each an appropriate filename 
    cv2.imsave('filename.jpg', reordered)
del reordered, order

推荐阅读