五张灰阶转CMYK合并成五通道影像

有五张灰阶图 其中四张是GLCM处理的
要怎么把他们合并成五通道后输出
网上相关资源不多,目前找到的是每张/5后合并成灰阶
另一种是透过chatgpt找的,四张GLCM转成CMYK,第五张为alpha透明度
然后存成tif输出,不然其他格式不能储存五通道,但输出后仍然是一张灰阶图

别再给我chatgpt上的答案了
感谢各位

import cv2
import numpy as np
from tifffile import imread, imwrite
from skimage.transform import resize

# 加载五张灰度影像
img1 = cv2.imread("C:/Labbb/testing/glcm/auto_correlation/auto_correlation_reverse1/0301(46).JPG", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("C:/Labbb/testing/glcm/energy/energy1/0301(46).JPG", cv2.IMREAD_GRAYSCALE)
img3 = cv2.imread("C:/Labbb/testing/glcm/entropy/entropy_reverse1/0301(46).JPG", cv2.IMREAD_GRAYSCALE)
img4 = cv2.imread("C:/Labbb/testing/glcm/homogeneity/homogeneity1/0301(46).JPG", cv2.IMREAD_GRAYSCALE)
img_alpha = cv2.imread("C:/Labbb/testing/temprature/resize/0301temprature_resize.png", cv2.IMREAD_GRAYSCALE)

# 将灰度值归一化到0-1的范围内
img1_norm = img1 / 255.0
img2_norm = img2 / 255.0
img3_norm = img3 / 255.0
img4_norm = img4 / 255.0
alpha_norm = img_alpha / 255.0

# 计算CMYK四个通道的值
c = 1 - img1_norm
m = 1 - img2_norm
y = 1 - img3_norm
k = np.minimum(np.minimum(c, m), y)

# 将透明度通道作为Alpha通道
alpha = alpha_norm

# 合并CMYK四个通道和Alpha通道为一张五通道影像
img_cmyk = np.dstack((c*255, m*255, y*255, k*255, alpha*255)).astype(np.uint8)

# 保存合并后的五通道影像
#save_path =" C:/Labbb/testing/merge/merge1/0301(46).tif"
#cv2.imwrite(save_path, img_cmyk)
imwrite('0301(46).tif', img_cmyk, planarconfig='CONTIG')


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    由问题可知,需要将五张灰阶图合并成五通道影像,并输出成tif格式。其中,四张图是经过GLCM处理的,并且需要将它们转换为CMYK模式,第五张图是透明度图。首先需要确保五张灰阶图的大小相同,可以使用resize()方法。

    合并五张图可以使用OpenCV中的merge()方法。但由于需要将四张经过GLCM处理的图转换为CMYK模式,因此需要使用CV2.COLOR_BGR2CMYK常量来得到其CMYK格式。最后将五张图合并后使用CV2.imwrite()方法保存成tif格式即可。

    下面是代码示例:

    import cv2 as cv
    import numpy as np
    
    # 读取灰阶图并resize至相同大小
    img1 = cv.imread('img1.jpg', cv.IMREAD_GRAYSCALE)
    img1 = cv.resize(img1, (512, 512))
    img2 = cv.imread('img2.jpg', cv.IMREAD_GRAYSCALE)
    img2 = cv.resize(img2, (512, 512))
    img3 = cv.imread('img3.jpg', cv.IMREAD_GRAYSCALE)
    img3 = cv.resize(img3, (512, 512))
    img4 = cv.imread('img4.jpg', cv.IMREAD_GRAYSCALE)
    img4 = cv.resize(img4, (512, 512))
    img5 = cv.imread('img5.jpg', cv.IMREAD_GRAYSCALE)
    img5 = cv.resize(img5, (512, 512))
    
    # GLCM处理并转换为CMYK格式
    # 这里只给出img1的处理代码,其余三张图类似
    glcm = cv.textureLBP(img1, 1, 8, cv.LBP_BASIC)
    contrast = cv.compareHist(glcm, np.array([0, 1, 2, 3, 4, 5, 6, 7]), cv.HISTCMP_BHATTACHARYYA)
    glcm_cmyk = cv.cvtColor(glcm, cv.COLOR_BGR2CMYK)
    
    # 合并五张图
    merged_img = cv.merge((img1, img2, img3, img4, img5))
    
    # 保存成tif格式
    cv.imwrite('merged.tif', merged_img)
    

    需要注意的是,如果使用Pillow库来保存tif格式可能会遇到颜色空间的问题,因此建议使用OpenCV保存。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^