【发布时间】:2021-04-16 01:25:51
【问题描述】:
我是 OpenCV 的新手,最近,我试图比较两张铁轨图像,一张有火车,一张没有。比较之后,我应用了一个阈值,白色区域中有一些我不想要的“洞”。目前,我正在使用具有 4 次迭代和内核设置为“无”的膨胀,据我了解,默认为 3x3。
我如何决定使用哪种内核,以便膨胀在使白色区域连续方面做得更好?如果我能去除背景中的白色小斑点也会很好。代码如下:
resized = imutils.resize(img2, width=1050)
resized2 = imutils.resize(img3, width=1050)
grayA = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(resized2, cv2.COLOR_BGR2GRAY)
grayA = cv2.GaussianBlur(grayA,(7,7),0)
grayB = cv2.GaussianBlur(grayB,(7,7),0)
frameDelta = cv2.absdiff(grayA, grayB)
thresh = cv2.threshold(frameDelta, 20, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.dilate(thresh, None, iterations=4)
完全是初学者,因此即使是改进这些比较的一般提示/建议也将不胜感激!
【问题讨论】:
-
您可以使用与要填充的孔或要移除的点大小差不多的内核大小,或者您可以使用小内核迭代多次以填充或移除数字迭代次数大约是孔的大小除以过滤器的大小。
-
几个问题:1)扩张功能如何帮助去除斑点? 2)我如何找到或估计给定图像中孔的大小? 3)我也尝试了非常多的迭代(10),但它并没有真正填补漏洞。它只是让白色区域本身更大。
-
@John 1)Dilation, 2) structuring Element, 3)OpenCV Tutorial.
-
@John 我从你的问题中了解到的是,你想为火车区域制作一个单一的面具(所以我建议使用
closing而不是dilation,以摆脱您可以使用Median Filter而不是Gaussian Filter的小点,关于内核大小,一种解决方案是循环使用可变内核大小,直到达到2 个区域background和mask。 -
@John 自动检测是否有 2 个区域
len(np.unique(mask))==2,其余的你必须尝试看看哪些参数最适合你的需求。
标签: python python-3.x opencv image-processing