在这张图片中,有两条明亮的线条贯穿整个图像,这就是我想要去除/减少外观的东西。在
我使用了一个阈值来识别这些明亮的条纹,它能很好地识别出这些区域:
目前我正在尝试一种缩小的方法,其中我试图减少像素的亮度,使他们不突出的图像。然而,这导致了奇怪的结果,我不知道为什么会这样。在
据我所见,它改变了像素的值,但在最终图像中留下了奇怪的结果。在
到目前为止,我一直在使用此代码来执行此过程:
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()
我不确定我到底哪里出错了,或者是否有更好的方法来获得我想要的东西
编辑:
*我想看到的是,可见的线条变得与周围的线条相似,因此看起来它们已经从图像中移除了*
不确定您希望的输出是什么,但是一种消除不均匀光照的方法是复制图像并在大面积上模糊,以消除高频变化,只保留低频、缓慢变化的区域,并将其称为背景光。然后从原始图像中减去此背景。在
我只需要使用ImageMagick就可以了,它包含在大多数Linux发行版中,并且适用于macOS和Windows。所以,就在航站楼:
您可以在Python或C++中使用OpenCV、PIL/SOIN或CIMG或IMAGEMGAK Python绑定来完成相同的操作。在
本质上,该处理将删除以下作为背景照明:
这个答案是基于这样一个假设:亮点总是以垂直线的形式出现。在这个样本图像上进行了测试,结果是相当好的,但是在其他类似的图片上肯定需要更多的测试。也就是说,我建议你试着找出阈值图像上的白点,这就是“斑点”,就像你已经在倒数第二张图片中发布的一样。如果愿意,可以通过转置函数
np.findnonzero(thresholded_image)
来获得位置或坐标。然后迭代列表,将原始图像的所有像素替换为与iter坐标相同的像素(x-1)。结果是:原始图像:
阴影图像:
结果图像:
希望它能给你一点帮助或者给你一个有用的新想法。干杯!在
编辑:
或者一种更好的方法: 使用
^{pr2}$cv2.inpaint()
函数,而不是遍历每个像素:结果:
相关问题 更多 >
编程相关推荐