c++ - which one the following centroid is the centroid of object in image? -
i want mass center of circle shape binary image, output give more 1 mass center. i'm using code opencv web tutorial document image moment , modified little bit. fyi, i'm using c++ api opencv.
and output is:
i expect, text output give maybe 3 centroid 3 contour, reality 7 contours (contours[0],...,contours[6]).
which 1 centroid? or, 1 contour area of circle shape?
then modified code, remove contours (because real picture noise, , want specific contours, circle shape, must remove other contours, line , character) using:
contours.erase()
i want centroid area contour between 100 till 500.
but, output become strange..
the centroids fly anywhere contours.
then, still, there 5 centroid 5 contours (contours[0],...,contours[4]).
what must do? want centroid of circle shape (above number 3). i'm need advice. thank much! :d
*sorry bad english..
what do:
- find contours (and store in vector of point) (
cv::findcontours
) apply custom particle filter. is, function tell whether contour valid. that, need base decision on morphological features such as
- circularity
- convexity
- aspect ratio
take @ like that have visual examples: can calculate circularity area (cv::contourarea
) , perimeter (cv::arclength
) while convexity involve computing convex hull (cv::convexhull
). step should result in new vector containing valid (e.i. circular contours).
your contourarea(contours[i], false) < 100
start, not tell whether contour circle.
after that, can calculate centre of gravity (and display it) of each element of new vector. make sense ?
finally, not use contours.erase()
large vectors. think iteratively erasing heavy job cpu. instead, store contours in new preallocated vector. performance detail.
Comments
Post a Comment