我是OpenCV和Python的新手,我制作了一个程序来查找面积大于500的轮廓并将其保存为新图像,并按照互联网上的建议使用boundingRect,它可以很好地运行并完成工作,但是我得到了图像输出有问题。似乎也可以节省感兴趣区域附近的噪声。如下图所示,在ROI旁附近有一些微小的形状。输出对于其他图像很有用,只是我想摆脱这种噪声。有没有办法消除输出中的此类噪音?
这是输入图像:
答案 0 :(得分:1)
根据输入数据的假设,可能有几种解决方案。
可能的方法
如果ROI的颜色与其他颜色明显不同,
1-1。您可以在找到轮廓之前使用RGB阈值输入图像。
如果要查找的对象的面积明显大于其他对象,则
2-1。填充this example
之类的孔2-2。计算斑点的大小,并排除除最大斑点(example to calculate the size of blobs)以外的所有斑点。
如果多个对象的轮廓之间有交点,则方法2肯定无法分割单个单元格的区域。
答案 1 :(得分:1)
此解决方案使用cv2.drawContours()
来简单地在噪声上绘制黑色轮廓。我对黑白样本图像进行了几次迭代迭代,按面积过滤了轮廓,然后在噪声上绘制了黑色轮廓线。我之所以使用阈值功能,是因为最初看起来像是简单的黑白图像,结果显示出很小的噪声。
import cv2
thresh_value = 10
img = cv2.imread("cells_BW.jpg")
img = cv2.medianBlur(img, 5)
dilation = cv2.dilate(img,(3,3),iterations = 3)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(T, thresh) = cv2.threshold(img_gray, thresh_value, 255, cv2.THRESH_BINARY)
_, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = [i for i in contours if cv2.contourArea(i) < 5000]
cv2.drawContours(img, contours, -1, (0,0,0), 10, lineType=8)
cv2.imwrite("cells_BW_CLEAN.jpg", img)