You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将二值图像转换为灰度图和RGB图?含皮肤病变图像脱毛需求

嘿,我来帮你搞定这些皮肤病变图像处理的问题~

皮肤病变图像脱毛后的图像恢复与格式转换方案

一、基于掩码恢复原始图像区域(实现黑色区域替换)

你要实现的是把掩码里的黑色区域替换成原始RGB图的对应内容,这本质是图像遮罩合成,用Python的OpenCV或者PIL库都能轻松搞定,我给你两种常用方案:

方案1:用OpenCV实现(适合偏向计算机视觉的工作流)

import cv2
import numpy as np

# 1. 读取图像:原始图是RGB格式,掩码以灰度图读取(二值图本质是单通道灰度图)
original_rgb = cv2.imread("原始图像路径.jpg")
mask_gray = cv2.imread("掩码图像路径.jpg", cv2.IMREAD_GRAYSCALE)

# 2. 确保掩码和原始图尺寸一致(如果尺寸不匹配,就缩放掩码对齐)
if original_rgb.shape[:2] != mask_gray.shape:
    mask_gray = cv2.resize(mask_gray, (original_rgb.shape[1], original_rgb.shape[0]))

# 3. 创建逆掩码:把掩码的黑色区域(像素值0)转为255(允许原始图像素通过),白色区域转为0(禁止通过)
inv_mask = cv2.bitwise_not(mask_gray)

# 4. 提取原始图中对应掩码黑色区域的像素
original_part = cv2.bitwise_and(original_rgb, original_rgb, mask=inv_mask)

# 5. 把掩码转为RGB通道,提取白色区域的像素
mask_rgb = cv2.cvtColor(mask_gray, cv2.COLOR_GRAY2BGR)
mask_part = cv2.bitwise_and(mask_rgb, mask_rgb, mask=mask_gray)

# 6. 合并两部分,得到最终结果
final_result = cv2.add(original_part, mask_part)

# 保存恢复后的图像
cv2.imwrite("恢复后的图像.jpg", final_result)

方案2:用PIL实现(更贴近Python原生风格)

from PIL import Image
import numpy as np

# 1. 读取图像:原始图转RGB,掩码转灰度(二值)模式
original_img = Image.open("原始图像路径.jpg").convert("RGB")
mask_img = Image.open("掩码图像路径.jpg").convert("L")

# 2. 对齐图像尺寸
if original_img.size != mask_img.size:
    mask_img = mask_img.resize(original_img.size)

# 3. 转为numpy数组方便像素级操作
original_np = np.array(original_img)
mask_np = np.array(mask_img)

# 4. 把掩码扩展为RGB三通道形状,生成替换掩码(标记哪些位置要用原始图像素)
mask_rgb_np = np.stack([mask_np]*3, axis=-1)
# 布尔掩码:True表示掩码中黑色区域(像素值0),需要替换为原始图内容
replace_mask = (mask_np == 0)[:, :, np.newaxis]

# 5. 合并图像:替换区域用原始图,其余区域保留掩码的白色
final_np = np.where(replace_mask, original_np, mask_rgb_np)

# 6. 转回PIL图像并保存
final_img = Image.fromarray(final_np.astype(np.uint8))
final_img.save("恢复后的图像.jpg")

二、Python中二值图像转灰度图、RGB图像的通用方法

1. 二值图像转灰度图

其实二值图像本身就是特殊的灰度图(只有0和255两个像素值),如果是已经读取的二值图,直接使用即可。如果需要显式转换:

  • 用PIL:读取后转为"L"模式
from PIL import Image
binary_img = Image.open("二值图路径.jpg")
gray_img = binary_img.convert("L")
gray_img.save("灰度图.jpg")
  • 用OpenCV:直接以灰度模式读取二值图
import cv2
gray_img = cv2.imread("二值图路径.jpg", cv2.IMREAD_GRAYSCALE)
cv2.imwrite("灰度图.jpg", gray_img)

2. 二值图像转RGB图像

核心是把单通道的二值图扩展为三通道,每个通道的像素值和原二值图一致,三种常用方法:

方法1:OpenCV一键转换

import cv2
binary_img = cv2.imread("二值图路径.jpg", cv2.IMREAD_GRAYSCALE)
rgb_img = cv2.cvtColor(binary_img, cv2.COLOR_GRAY2BGR)
cv2.imwrite("RGB图.jpg", rgb_img)

方法2:PIL简单转换

from PIL import Image
binary_img = Image.open("二值图路径.jpg").convert("L")
rgb_img = binary_img.convert("RGB")
rgb_img.save("RGB图.jpg")

方法3:Numpy手动扩展(适合自定义操作)

import numpy as np
from PIL import Image

binary_np = np.array(Image.open("二值图路径.jpg").convert("L"))
# 将单通道数组重复三次,生成三通道RGB数组
rgb_np = np.stack([binary_np]*3, axis=-1)
rgb_img = Image.fromarray(rgb_np.astype(np.uint8))
rgb_img.save("RGB图.jpg")

内容的提问来源于stack exchange,提问作者codelearn22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:13:42