如何在多个图像上使用 cv2.split 和 cv2.merge?

Posted

技术标签:

【中文标题】如何在多个图像上使用 cv2.split 和 cv2.merge?【英文标题】:How to use cv2.split and cv2.merge on multiple images? 【发布时间】:2017-09-29 19:03:40 【问题描述】:

我知道 cv2 函数 split() 和 merge()。 在使用此功能拆分列表中的多个图像时,我需要一些帮助。我有一个包含图像的列表。图像都是 numpy 数组。 它们采用 YCrCb 格式,基本上是 3 通道格式。

我想使用 cv2.split() 将每个图像分成 Y、Cr、Cb 通道

我正在尝试运行这样的 for 循环:

for index, item in enumerate(imgSet):
    imageChannel.append(cv2.cvtColor(item, cv2.COLOR_BGR2YCR_CB))
for index_, item_ in enumerate(imageChannel):
    Y, Cr, Cb = cv2.split(item_)

这不起作用。它返回一个 Y 通道,而不是每张图像的 12 个(列表中的总图像)Y 通道。

编辑:换句话说,我有 numpy 形状数组(12,224,224,3),其中有 12 个图像,每个图像大小为 224x224 和 3 个颜色通道。 我想访问频道并使用 cv2 拆分它们。

我的目标是将列表中的每个图像分成 3 个通道。 请帮忙。

【问题讨论】:

【参考方案1】:

YCrCb 是单独的变量,您的循环会反复覆盖它们。

for index, item in enumerate(imgSet):
    imageChannel.append(cv2.cvtColor(item, cv2.COLOR_BGR2YCR_CB))
Y = [None]*12
Cr = [None]*12
Cb = [None]*12
for index_, item_ in enumerate(imageChannel):
    Y[index_], Cr[index_], Cb[index_] = cv2.split(item_)

【讨论】:

以上是关于如何在多个图像上使用 cv2.split 和 cv2.merge?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 函数学习11-图像通道的拆分(cv2.split)

opencv-python(cv2)

OpenCV通道的分离和合并

在 python 中使用 OpenCV 分割图像

机器学习进阶-图片基本处理-ROI区域 1.img[0:200, 0:200]截取图片 2.cv2.split(对图片的颜色通道进行拆分) 3. cv2.merge(将颜色通道进行合并) 4 c

OpenCV和Matplotlib色彩空间模式不一致的问题