【问题标题】:How can I remove the bright glare regions in image如何去除图像中的明亮眩光区域
【发布时间】:2022-06-21 14:41:06
【问题描述】:

我有一些番茄图像,番茄上有明亮的阴影。我想删除/减少这些明亮的阴影点。有什么建议吗?

我尝试了下面的代码,但它没有解决我的问题:

def decrease_brightness(img, value=30):
  hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
  h, s, v = cv2.split(hsv)

  lim = 255 - value
  v[v >= lim] -= value

  final_hsv = cv2.merge((h, s, v))
  img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
  return img

image = decrease_brightness(image, value=50)

【问题讨论】:

  • 您能说出这些代码不能解决您的问题的原因吗?并且请在您的问题上添加python 标签,因为您使用的是python 编程语言
  • 请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
  • 使用降低亮度代码后,明亮的阴影部分没有减少或去除。
  • 通过阈值 (cv2.inRange) 制作明亮区域的蒙版。然后使用修复去除明亮区域并用番茄纹理填充它们。 OpenCV 和 SkImage 都有修复方法。
  • @fmw42 可以分享一下这个处理的代码吗?

标签: python opencv image-processing


【解决方案1】:

这里是如何在 Python/OpenCV 中进行修复。

请注意,阴影是黑暗的。您想要移除明亮的眩光区域。请使用正确的术语,以免在论坛上混淆其他人。参考字典。

  • 读取输入
  • 使用 cv2.inRange() 对灰色背景设置阈值
  • 应用形态来关闭和扩张
  • 用黑色填充外部以制作蒙版图像
  • 使用蒙版进行修复(两种方法)
  • 保存结果

输入:

import cv2
import numpy as np

# read image
img = cv2.imread('tomato.jpg')
hh, ww = img.shape[:2]

# threshold
lower = (150,150,150)
upper = (240,240,240)
thresh = cv2.inRange(img, lower, upper)

# apply morphology close and open to make mask
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, iterations=1)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (25,25))
morph = cv2.morphologyEx(morph, cv2.MORPH_DILATE, kernel, iterations=1)

# floodfill the outside with black
black = np.zeros([hh + 2, ww + 2], np.uint8)
mask = morph.copy()
mask = cv2.floodFill(mask, black, (0,0), 0, 0, 0, flags=8)[1]

# use mask with input to do inpainting
result1 = cv2.inpaint(img, mask, 101, cv2.INPAINT_TELEA)
result2 = cv2.inpaint(img, mask, 101, cv2.INPAINT_NS)

# write result to disk
cv2.imwrite("tomato_thresh.jpg", thresh)
cv2.imwrite("tomato_morph.jpg", morph)
cv2.imwrite("tomato_mask.jpg", mask)
cv2.imwrite("tomato_inpaint1.jpg", result1)
cv2.imwrite("tomato_inpaint2.jpg", result2)

# display it
cv2.imshow("IMAGE", img)
cv2.imshow("THRESH", thresh)
cv2.imshow("MORPH", morph)
cv2.imshow("MASK", mask)
cv2.imshow("RESULT1", result1)
cv2.imshow("RESULT2", result2)
cv2.waitKey(0)

阈值图像:

形态和填充图像:

面具图片:

Inpaint Telea:

Inpaint Navier-Stokes:

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多