gpt4 book ai didi

python - 如何使用 Gimp/OpenCV Color 将图像分成彩色 RGB 图层?

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:42 24 4
gpt4 key购买 nike

我有一张 JPG 图片,我想找到一种方法:

  • 将图像分解为红色、绿色和蓝色强度层(每个 channel 8 位)。
  • 用适当的颜色为这些现在的“灰度”图像中的每一个着色
  • 为每个 channel 生成 3 个颜色合适的输出图像。

例如,如果我有一张图片:狗.jpg

我要生产:dog_blue.jpg dog_red.jpg 和 dog_green.jpg

我不想要每个 channel 的灰度图像。我希望每个图像都由其正确的颜色表示。

我已经设法使用 gimp 中的分解功能来获取图层,但是每个图层都是灰度的,我似乎无法为其添加颜色。

我目前正在为其他项目使用 OpenCV 和 Python 绑定(bind),因此如果使用 gimp 不容易实现,那么任何合适的代码都可能有用

最佳答案

也许您已经弄清楚了这一点,但这是为那些想要以自己的颜色“看到”他们的分离 channel 的人准备的(即 - 红色中的红色,绿色中的绿色等)。

每个 channel 只是一个单值图像,可以解释为单色图像。但是你可以通过添加两个假的空 channel (下面的zero_channel)来“添加颜色”,并将它cv2.merge变成一个多 channel 图像。

#!/usr/bin/env python

import cv2
import numpy as np
import os
import sys

SHOW = True
SAVE = True


def split_channels(filename):
img = cv2.imread(filename)
if len(img.shape) != 3 or img.shape[2] != 3:
sys.stderr.write('{0}: not a correct color image'.format(filename))
return
channels = cv2.split(img)
zero_channel = np.zeros_like(channels[0])
red_img = cv2.merge([zero_channel, zero_channel, channels[2]])
green_img = cv2.merge([zero_channel, channels[1], zero_channel])
blue_img = cv2.merge([channels[0], zero_channel, zero_channel])
if SHOW:
cv2.imshow('Red channel', red_img)
cv2.imshow('Green channel', green_img)
cv2.imshow('Blue channel', blue_img)
cv2.waitKey(0)
if SAVE:
name, extension = os.path.splitext(filename)
cv2.imwrite(name+'_red'+extension, red_img)
cv2.imwrite(name+'_green'+extension, green_img)
cv2.imwrite(name+'_blue'+extension, blue_img)


def main():
if len(sys.argv) < 2:
print('Usage: {0} <rgb_image>...'.format(sys.argv[0]))
map(split_channels, sys.argv[1:])


if __name__ == '__main__':
main()

关于python - 如何使用 Gimp/OpenCV Color 将图像分成彩色 RGB 图层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19213407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com