Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 图像中的反射抑制_Opencv_Computer Vision - Fatal编程技术网

Opencv 图像中的反射抑制

Opencv 图像中的反射抑制,opencv,computer-vision,Opencv,Computer Vision,照明问题是常见且困难的。如何检测和减少光反射以保存图像中的更多信息?我用OpenCV和Python尝试了几种方法,但运气不佳 (带反射的图像) (无反射图像) 我尝试转换到HSV颜色空间,并对V通道应用直方图均衡化,使用均衡化: import cv2 import numpy as np image = cv2.imread('glare.png') hsv_image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV) h, s, v = cv2.spli

照明问题是常见且困难的。如何检测和减少光反射以保存图像中的更多信息?我用OpenCV和Python尝试了几种方法,但运气不佳

(带反射的图像)

(无反射图像)

我尝试转换到HSV颜色空间,并对V通道应用直方图均衡化,使用均衡化:

import cv2
import numpy as np

image = cv2.imread('glare.png')

hsv_image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
h, s, v = cv2.split(hsv_image)

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
v = clahe.apply(v)

hsv_image = cv2.merge([h, s, v])
hsv_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2RGB)

cv2.imwrite('clahe_h.png', hsv_image)
结果:

我还尝试了阈值化来寻找明亮的像素,然后用相邻的像素替换它们

import cv2
import numpy as np

image = cv2.imread('glare.png')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)[1]

dst_TELEA = cv2.inpaint(image,thresh,3,cv2.INPAINT_TELEA)
cv2.imwrite('after_INPAINT.png',dst_TELEA)
结果: (阈值后)


没有有效消除眩光的一般方法


HSV+CLAHE是一个良好且常见的开端,但行业方法通过假设一些关于主题的信息(人脸、传送带上的水果、通过检眼镜的视网膜)以及有时关于照明的信息(对于本问题中的图像,具有非常锐利边缘的白色顶棚灯)来“欺骗”.

他们声称使用自适应阈值,您可能可以进行边缘检测。你会在玻璃上看到明显的边缘。然后可以将边缘边界内的像素与边界外的像素进行映射。但是,这可能仅适用于此消息。另外,尝试在所有三个通道上运行CLAHE。我尝试了自适应阈值,但没有产生任何好的结果@Rick M.谢谢,我想知道什么是处理光反射问题的最合适的方法不仅是这种情况,而且谢谢你的回答,我会尝试并发布结果。尝试使用230到240的阈值,我尝试了,它似乎可以完美地检测到反射的边缘。在此之后,你可以称之为修复。我知道的大多数反射/阴影消除方法都是基于边缘的方法。您可能需要对此进行一些研究。在第一个示例中,您使用cv2.COLOR\u RGB2HSV转换图像。imread()输出BGR而不是RGB图像。不管怎样,你最终找到解决办法了吗?