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

如何使用Python提升图像黑白清晰度以优化整体图像质量

问题分析

你当前的代码存在3个核心问题导致黑白分割效果不佳:

  • convert("LA") 得到的每个像素是(亮度值, 透明度)二元组,直接和三元组的固定阈值比较逻辑不成立
  • 全局固定阈值138无法适配图像的局部光照差异,容易出现暗部糊成一团、亮部细节丢失的问题
  • 没有前置降噪、对比度增强处理,二值化后边缘容易出现锯齿噪点

优化方案

方案1:修复原有逻辑,适配全局阈值场景

from PIL import Image

def enhance_image(img_path, threshold=138):
    black = (0, 0, 0)
    white = (255, 255, 255)
    # 直接转灰度图,不需要alpha通道
    img = Image.open(img_path).convert("L")
    pixels = img.getdata()
    newPixels = []
    
    for pixel in pixels:
        # 只比较亮度值
        if pixel < threshold:
            newPixels.append(black)
        else:
            newPixels.append(white)

    newImg = Image.new("RGB", img.size)
    newImg.putdata(newPixels)
    newImg.save("MyTemp.jpg")

如果图像光照均匀,这个版本已经可以得到更清晰的黑白分割效果,你可以根据实际画面调整threshold参数的数值,数值越高黑色区域越多,反之白色区域越多。

方案2:用自适应阈值优化光照不均场景

如果你的图像存在阴影、光照不均匀的情况(比如你提供的示例图),用自适应阈值效果会好很多,我们可以配合OpenCV实现:

import cv2
import numpy as np
from PIL import Image

def enhance_image_adaptive(img_path):
    # 读取图像转灰度
    img = cv2.imread(img_path, 0)
    # 高斯模糊降噪
    img = cv2.GaussianBlur(img, (5,5), 0)
    # 自适应阈值二值化,11是邻域大小,2是修正常数
    thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    # 保存图像
    cv2.imwrite("MyTemp.jpg", thresh)

这个方案会根据每个像素周围11*11区域的亮度计算专属阈值,能自动适配明暗不同的区域,黑白分割的边缘会更锐利,细节保留更完整。

示例图像参考

示例图像

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:15:10