我有一张如下图:
在这张图片中,有两条明亮的线条贯穿图片,这些是我想要移除/减少外观的内容。
我使用了一个阈值来识别这些明亮的条纹,它可以很好地识别出这些区域:
目前我正在尝试一种减少方法,我试图只是减少像素的亮度,这样它们就不会在图像中突出显示。然而,这导致了奇怪的结果,我不确定为什么会这样。
奇怪的结果:
据我所知,它正在改变像素的值,但它在最终图像中留下了奇怪的结果。
到目前为止,我一直在使用此代码来执行该过程:
img = cv2.imread('43.bmp')
h,s,v= cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
ret1,th1 = cv2.threshold(v,240,255,cv2.THRESH_BINARY)
bright = np.where(th1, np.where((255-v) < 40, v-30,v),0)
th1_n = cv2.bitwise_not(th1)
dark = np.where(th1_n,v,0)
result = bright + dark
mergeColour = cv2.cvtColor(cv2.merge([h,s,result]),cv2.COLOR_HSV2BGR)
cv2.imshow("frame", mergeColour.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
我不确定我到底哪里出错了,或者是否有更好的方法来获取 id
编辑:
* id 想看到的是,可见线条变得与周围的其他线条相似,因此看起来它们已从图像中删除 *
最佳答案
不确定您希望得到什么输出,但是消除不均匀照明的一种方法是复制图像并将其在大面积上模糊以消除高频变化并仅保留低频缓慢变化的区域,并将其称为背景照明.然后从原始图像中减去这个背景。
我只是用 ImageMagick 来做,它包含在大多数 Linux 发行版中,可用于 macOS 和 Windows。所以,就在终端:
convert input.gif \( +clone -blur 0x32 \) -compose difference -composite -auto-level result.jpg
您可以在 Python 或 C++ 中使用 OpenCV、PIL/Pillow 或 CImg 或 ImageMagick Python 绑定(bind)执行完全相同的操作。
本质上,该处理将以下内容作为背景照明移除:
关于python - 有没有办法在 OpenCv 中删除图像中的垂直亮条纹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495193/