views:

1254

answers:

2

I'm working on a Image-processing chain that seperates a single object by color and contour and then calculates the y-position of this object.

How do I calculate the center of a contour or area with opencv?

Opencv links:

A: 

I don't exactly know what OpenCV is, but I would suggest this:

The Selected cluster of pixels has a maximum width at one point - w - so lets say the area has w vertical columns of pixels. Now I would weight the columns according to how many pixels the column contains, and use these column-wights to determine the Horizontal Center Point.

The Same Algorithm could also work for the X Center.

wsd
No point doing it yourself when there's multiple builtin ways to do it.
Kiv
+2  A: 

You can get the center of mass in the y direction by first calculating the Moments. Then the center of mass is given by yc = M01 / M00, where M01 and M00 are fields in the structure returned by the Moments call.

If you just want the center of the bounding rectangle, that is also easy to do with BoundingRect. This returns you a CvRect and you can just take half of the height.

Let me know if this isn't precise enough, I have sample code somewhere I can dig up for you.

Kiv
Thirdly, you can compute the Convex Hull and its moment (which is in fact the first internal step in BoundingRect). Fourthly, you can calculate the center of mass of just the contour pixels (i.e. the pixels that lie exactly on the contour). All these methods will give *different* values, and their usefulness will depend on your application's specific needs.
rwong