图片通道转换

import os
import cv2


def image3to1(path):
    """
    三通道图像转换成一通道,保存到自定义文件夹中
    :param path: 输入图像路径
    :return:
    """
    # 获取绝对路径
    path = os.path.abspath(path)

    # 读取图像,确保是三通道图像
    img = cv2.imread(path)
    if img is not None and len(img.shape) == 3 and img.shape[2] == 3:
        # 将三通道图像转换为灰度图像(一通道)
        gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        # 创建保存目录
        save_dir = os.path.join(os.path.dirname(path), '1_channel_images')
        os.makedirs(save_dir, exist_ok=True)

        # 保存一通道图像
        save_path = os.path.join(save_dir, os.path.basename(path))
        cv2.imwrite(save_path, gray_img)
        print(f"三通道图像已转换为一通道并保存到:{save_path}")
    else:
        print(f"无法处理 {path}:文件不存在或不是三通道图像")


def image1to3(path):
    """
    一通道图像转换成三通道,保存到自定义文件夹
    :param path: 输入图像路径
    :return:
    """
    # 获取绝对路径
    path = os.path.abspath(path)

    # 读取图像,确保是单通道图像
    img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
    if img is not None:
        # 将一通道图像转换为三通道图像
        three_channel_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

        # 创建保存目录
        save_dir = os.path.join(os.path.dirname(path), '3_channel_images')
        os.makedirs(save_dir, exist_ok=True)

        # 保存三通道图像
        save_path = os.path.join(save_dir, os.path.basename(path))
        cv2.imwrite(save_path, three_channel_img)
        print(f"一通道图像已转换为三通道并保存到:{save_path}")
    else:
        print(f"无法处理 {path}:文件不存在或不是单通道图像")


def main():
    image_path = r'E:\programs\Image_chanl\image\1_channel_images\a3.png'

    # 如果路径是一个文件
    if os.path.isfile(image_path):
        print("3 to 1")
        # image3to1(image_path)
        image1to3(image_path)

    # 如果路径是一个文件夹,对文件夹内每一个文件执行操作
    elif os.path.isdir(image_path):
        for file in os.listdir(image_path):
            img_path = os.path.join(image_path, file)
            image3to1(img_path)

    else:
        print("文件错误!")


if __name__ == '__main__':
    main()
    print("end!")