如何用Python(OpenCV、numpy、Pillow)将普通图像转为X光图像?
普通图像转X光图像的实现问题
我希望用Python结合OpenCV、numpy、Pillow将普通图像转换为X光图像,目前已经完成部分代码编写,但无法得到理想的X光效果。我尝试了多种调整方式,当前生成的结果偏暗且缺乏X光特有的通透感,和期望中那种灰蓝调、骨骼轮廓清晰的X光效果不符。
以下是我目前的代码:
import cv2 import numpy as np from PIL import Image import os def apply_xray_effect(input_image_path, output_image_path): # 用Pillow读取输入图像 pil_image = Image.open(input_image_path) # 将PIL图像转换为NumPy数组 img_np = np.array(pil_image) # 复制图像用于X光效果转换 xray_effect = img_np.copy() # 调整亮度和对比度 alpha = 0.3 # 对比度调整(1.0为原对比度) beta = -140 # 亮度调整(0为原亮度) xray_effect = cv2.convertScaleAbs(xray_effect, alpha=alpha, beta=beta) # 应用伪色彩映射,赋予蓝调效果 colormap = cv2.applyColorMap(xray_effect, cv2.COLORMAP_BONE) # 定义感兴趣区域(ROI)的参数 x = 200 # ROI左上角X坐标 y = 250 # ROI左上角Y坐标 width = 300 # ROI宽度 height = 250 # ROI高度 # 再次将PIL图像转换为NumPy数组 pil_image_np = np.array(pil_image) # 创建ROI掩码 mask = np.zeros_like(pil_image_np) cv2.rectangle(mask, (x, y), (x + width, y + height), (255, 255, 255), thickness=-1) # 用白色填充ROI # 应用掩码提取ROI roi = cv2.bitwise_and(pil_image_np, mask) # 修改ROI颜色(示例:转为绿色) roi[:, :, 0] = 0 # 关闭蓝色通道 roi[:, :, 1] = 255 # 拉满绿色通道 roi[:, :, 2] = 0 # 关闭红色通道 # 保存生成的X光风格图像 cv2.imwrite(output_image_path, colormap) if __name__ == "__main__": input_image_path = r"C:\Users\Ayad\OneDrive\Desktop\girl.jpeg" # 替换为你的输入图像路径 output_directory = r"C:\Users\Ayad\OneDrive\Desktop" # 输出目录路径 output_xray_image_path = os.path.join(output_directory, "changedImg_xray.png") apply_xray_effect(input_image_path, output_xray_image_path) # 显示图像 xray_image = cv2.imread(output_xray_image_path) cv2.imshow("X-ray Image", xray_image) cv2.waitKey(0) # 按下任意键关闭窗口 cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Antonio Dawson
相关产品推荐
相关产品推荐

