有五张灰阶图 其中四张是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')
不知道你这个问题是否已经解决, 如果还没有解决的话:由问题可知,需要将五张灰阶图合并成五通道影像,并输出成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保存。