Ask Your Question
0

How to use connectedComponentsWithStats to remove dots?

asked 2017-05-02 01:18:18 -0600

Luya gravatar image

updated 2017-05-02 01:32:28 -0600

With contour,I can do it like this:

if cv2.contourArea(cntr) <= 3: cv2.drawContours(img, [cntr], -1, (0, 0, 0), 1)

How to do it wiht ConnectedComponentsStats?

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted
1

answered 2017-05-02 03:08:47 -0600

kbarni gravatar image

updated 2017-05-02 03:13:01 -0600

Probably connectedComponentsWithStats is not the most efficient way to remove dots. I would rather use the erosion or the opening (erosion+dilatation) morphology operator.

If you want to stuck with connectedComponentsWithStats, the code (C++) will be:

for(int i=0;i<stats.rows;i++)    //for each label 
    if(stats.at<ushort>(i,CC_STAT_AREA)<=3)    //if area<3
        for(int y=centroids.at<float>(i,1)-1;y<=centroids.at<float>(i,1)+1;y++)   // scan the neighboring pixels
            for(int x=centroids.at<float>(i,0)-1;x<=centroids.at<float>(i,0)+1;x++)
                if(labels.at<ushort>(x,y)==i)image.at<uchar>(x,y))=0;   // if the label matches, set the current pixel to 0

I commented the code, so it will be easier to rewrite in Python.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2017-05-02 01:18:18 -0600

Seen: 1,441 times

Last updated: May 02 '17