【问题标题】:How can I apply black and white clipping on an image with Pillow?如何使用 Pillow 在图像上应用黑白剪裁?
【发布时间】:2022-06-15 18:48:21
【问题描述】:

绝对这里是图像处理新手)

我正在尝试使用 Pillow 在图像上应用黑白剪辑。据我了解,我必须调整对比度,我的问题是这种方法是否正确?

from PIL import Image, ImageEnhance
image = Image.open('myimage.jpg')
contrast = ImageEnhance.Contrast(image)
contrast.enhance(2).show()

我正在尝试在名为 Color Factory 的工具中复制相同的功能,该工具具有将“黑白剪辑”值设置为特定百分比的选项。

裁剪值是指将被裁剪的像素数量 在黑白端点之外。例如。如果黑色剪裁 值已设置为 0.5%,即图像中像素的 0.5% 将是黑色的。

【问题讨论】:

  • 这与 alpha 修剪有什么关系吗?任何小于alpha 或大于1 - alpha 的像素(假设强度已归一化)设置为恒定值?你能举个例子吗?
  • 我也在寻找这个问题的答案。 Lightroom 有我想自己实现的两个滑块(黑色剪辑/白色剪辑)(opencv、numpy 或其他......)

标签: python image-processing python-imaging-library


【解决方案1】:

当我在寻找相同的答案时,我试图了解图像处理中的黑白剪裁。下面的解释和代码同样适用于削白。

对于黑色裁剪,您希望一定范围的暗像素(例如 0 到 10)实际上是黑色(值 0)而不是黑色。这会从图像中删除细节,因为具有黑色值的区域在裁剪后将是纯黑色。

我使用 OpenCV 和 python 实现的 RGB 图像如下所示:

def bgr_clipBlack(img, value):
"""Clips the black part of the image. Pixel values ranging [0, value] will be all
clipped to 0 in the resulting image. The image shall be in the BGR format,
value shall be between 0 and 255."""

lut = np.zeros((1, 256), np.uint8)
if value != 255:
    for i in range(value, 256):
        lut[0, i] = ((i - value) * 255) / (255 - value)

return cv2.LUT(img, lut)

img 是 cv2.imread() 读取的图像。 该函数将 [0...value] 内的每个通道(R、G 和 B)的值裁剪为 0,并将剩余值从 [value...255] 范围转换为 [0...255] 这给了我与相应的 Lightroom 功能相同的结果。

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 2020-07-02
    • 2023-03-23
    • 1970-01-01
    • 2021-03-06
    • 2015-08-05
    • 2014-07-27
    相关资源
    最近更新 更多