python - 有没有办法在 OpenCv 中删除图像中的垂直亮条纹?

标签 python python-3.x image opencv

我有一张如下图:enter image description here

在这张图片中,有两条明亮的线条贯穿图片,这些是我想要移除/减少外观的内容。

我使用了一个阈值来识别这些明亮的条纹,它可以很好地识别出这些区域:

enter image description here

目前我正在尝试一种减少方法,我试图只是减少像素的亮度,这样它们就不会在图像中突出显示。然而,这导致了奇怪的结果,我不确定为什么会这样。

奇怪的结果:
enter image description here

据我所知,它正在改变像素的值,但它在最终图像中留下了奇怪的结果。

到目前为止,我一直在使用此代码来执行该过程:

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

enter image description here

您可以在 Python 或 C++ 中使用 OpenCV、PIL/Pillow 或 CImg 或 ImageMagick Python 绑定(bind)执行完全相同的操作。

本质上,该处理将以下内容作为背景照明移除:

enter image description here

关于python - 有没有办法在 OpenCv 中删除图像中的垂直亮条纹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495193/

相关文章:

python - 根据多个groupby计算总和

python - 在插值中使用先前配置文件中的值

python - 通过 Azure Databricks Notebook URL 传递参数

sqlite - 两列使用 SqlAlchemy 加入同一个表

c++ - 如何从 Python 使用 Microsoft MIP SDK?

python - 当您将类实现存储在字符串中时,创建 Python 对象的最佳方法是什么?

Python yaml : ModuleNotFoundError

android - Drawable-hdpi、Drawable-mdpi、Drawable-ldpi Android

html - div 内的 img 应填充宽度或高度

image - 如何让 QWebKit 显示图像?