【问题标题】:How to invert an image when it is only dark?当图像只有黑暗时如何反转图像?
【发布时间】:2021-09-12 18:42:02
【问题描述】:

当图像只有深色背景或主题时,我想反转图像。例如,当我有一个带有深色主题的 GUI 窗口时,我想反转它的颜色以使其变亮。但是,当它具有浅色主题时,请保持原样。

我指的是深色主题,不仅是黑色,还包括任何其他深色(例如深蓝色)。我找到了一些建议计算零的解决方案,但我认为这仅适用于黑色背景/主题。

【问题讨论】:

  • 那你认为什么是黑暗的?如果您对您的情况的“黑暗”没有任何严格的数学定义,则无法回答。
  • @TedKleinBergman 就像您在系统中使用夜间主题/深色主题时一样。如果我们从 0(黑色)缩放到 255(白色)。我会认为不到 50% 的地方是黑暗的,而其他人则认为是光明的
  • 不同的应用程序有不同的夜间主题,因此也有不同的颜色。在黑暗变成光明之前,您需要定义什么是适当的阈值。我的猜测是你想要任何 RGB 颜色,其中 127 以下的所有颜色分量都被认为是暗的,而所有颜色分量都是亮的,但这将是一个非常脆弱的定义。
  • learnopencv.com/opencv-threshold-python-cpp OpenCV 中的图像阈值,您可以尝试一种对图像进行采样并根据采样结果应用阈值的方法.... 想的路很长,但您会得到回报跨度>
  • 看看这是否相关stackoverflow.com/questions/52505906/…查找图像是亮还是暗

标签: python image-processing cv2


【解决方案1】:

受这些post1post2 的启发,我找到了我需要的解决方案,并且我对我的数据进行了测试以获得 100% 的准确率。

以下是我使用的代码:

import cv2

def is_img_dark(img):
    #blur = cv2.blur(img, (5, 5))  # With kernel size depending upon image size # You could skip the blur and get exactly the same result

    if cv2.mean(img)[0] > 127:  # The range for a pixel's value in grayscale is (0-255), 127 lies midway
        return False # (127 - 255) denotes light image
    else:
        return True # (0 - 127) denotes dark image

img_file = "THE PATH OF THE IMAGE"
im = cv2.imread(img_file,0) # 0 here to gray the image
if is_img_dark(im):
    im = ~im # invert colors

【讨论】:

  • 有什么方法可以将图像读取为 color_images ??
  • @pippo1980 我会使用另一个对象 (im2):im2 = cv2.imread(img_file)。另一种方法是将第一张图像保留为彩色而不将其转换为灰色,并在 is_img_dark 函数中将图像转换为灰色。
  • 对图像进行扩音不会影响其平均值。您可以跳过模糊并获得完全相同的结果。
  • 三通道 RGB 图像使用(每个通道的)均值来考虑图像暗或亮是否有意义? (>127) 喜欢:如果 statistics.mean(cv2.mean(img)) > 127
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2011-07-12
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
相关资源
最近更新 更多