我正在使用 Python 上的 OpenCV 处理图像,我想计算图像上的每个对象(蠕虫)。蠕虫是浅米色,而背景是黑色(见图),因此很容易区分它们。问题在于,有时蠕虫彼此之间距离太近(有时甚至重叠),并且 cv.findContours()会绘制一个大轮廓,而不是两个较小的轮廓(请参见下图)。
因为我使用的是 cv.foundContours(),所以我必须首先将图片变成黑白,然后对其进行模糊处理(可选),最后对其进行阈值处理,以使白色蠕虫进入黑色背景。
我正在使用以下代码:
import cv2 as cv
img = cv.imread('worms.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
blur=cv.GaussianBlur(gray,(5,5),1)
ret,osu = cv.threshold(blur,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
imsource,contours,test = cv.findContours(osu,1,1)
cv.drawContours(img,contours,-1, (0,0,255),2)
我试图侵蚀阈值图像,但由于两个蠕虫之间的“结合”很大,因此效果不佳。
感谢您的帮助