使用opencv,如何不使用erosion/dilation而是使用connectedComponentsWithStas来去除点?
With opencv,How to use not erosion/dilation but connectedComponentsWithStas to remove dots?
我读过这个:
erosion/dilation 被建议,只是想知道是否可以通过使用 connectedComponectsStats 来做同样的事情?我用谷歌搜索,得到了这些:
但是从这些,我不知道如何去除点,所以请你告诉我怎么做,提前谢谢!
更新:
我真正想做的是通过去除小点从打击图像中提取人形。
使用 connectedComponentsWithStats
你可以这样做:
img = cv2.imread(directory + "canny.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
labelnum, labelimg, contours, GoCs = cv2.connectedComponentsWithStats(gray)
for label in xrange(1, labelnum):
x,y,w,h,size = contours[label]
if size <= 50:
img[y:y+h, x:x+w] = 0
cv2.imwrite(directory + "cca_image.png", img)
对于您上传的图片,我得到的结果是:
这对你有用吗?我想在调用 connectedComponentsWithStats
之前 dilation/erosion 会有所帮助,但我将其留给您来决定。
我读过这个:
erosion/dilation 被建议,只是想知道是否可以通过使用 connectedComponectsStats 来做同样的事情?我用谷歌搜索,得到了这些:
但是从这些,我不知道如何去除点,所以请你告诉我怎么做,提前谢谢!
更新: 我真正想做的是通过去除小点从打击图像中提取人形。
使用 connectedComponentsWithStats
你可以这样做:
img = cv2.imread(directory + "canny.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
labelnum, labelimg, contours, GoCs = cv2.connectedComponentsWithStats(gray)
for label in xrange(1, labelnum):
x,y,w,h,size = contours[label]
if size <= 50:
img[y:y+h, x:x+w] = 0
cv2.imwrite(directory + "cca_image.png", img)
对于您上传的图片,我得到的结果是:
这对你有用吗?我想在调用 connectedComponentsWithStats
之前 dilation/erosion 会有所帮助,但我将其留给您来决定。