我有一个RGB图像,上面有一些条形码。在我的算法中,我应用梯度来识别条形码,但当条形码上有光反射时,问题就来了。所以我一直在尝试去除反射,但也试图保留该区域的条形码。下面是一个示例图像:

我在高于(225,225,225):(R,G,B)的像素中使用了inpaint函数,但结果不是我想要的,甚至更糟。代码:
target = cv2.bitwise_and(image,image, mask=mascara) #Original image
target_gray = cv2.cvtColor(target, cv2.COLOR_RGB2GRAY)
#Filtro para quitar reflejos de los códigos de barras
red = numpy.array(image[:,:,0])
green = numpy.array(image[:,:,1])
blue = numpy.array(image[:,:,2])
mascara_red = red > 225
mascara_green = green > 225
mascara_blue = blue > 225
mascara_reflejo = mascara_red & mascara_green & mascara_blue # ENGLISH: WE USE INPAINT FUNCTION IN PIXELS HIGHER THAN (225, 225, 225)
kernel_reflejo = numpy.zeros((height, width),numpy.uint8)
kernel_reflejo[mascara_reflejo == True] = 255
# print(kernel_reflejo)
sin_reflejo = cv2.inpaint(target, kernel_reflejo, 30, cv2.INPAINT_TELEA)我不知道是不是这个方法不对。我得到的结果是下面的图片:

1条答案
按热度按时间x33g5p2x1#
我们可以从应用imflatfield(2-D图像平场校正)开始,然后应用降噪和锐化。
请注意,建议的解决方案不能保证改善条形码检测,也不能保证适用于所有图像。
建议阶段:
我们可以使用我的following answer中的Python实现。
注:使用非局部均值的想法来自following post。
代码示例:
原始图像:
flat_img:denoised_flat_img:sharpened_flat_img:注意事项:
最好的解决方案是在捕获图像时去除反射(如果可能的话)。
图像处理解决方案(在当前的上下文中)应该更像学术主题(对于解决“真实的问题”可能不是很实用)。