Path: blob/master/CenterofBlob/center_of_multipe_blob.cpp
3118 views
#include "opencv2/highgui/highgui.hpp"1#include "opencv2/imgproc/imgproc.hpp"2#include <iostream>3#include <stdio.h>4#include <stdlib.h>56using namespace cv;7using namespace std;89RNG rng(12345);1011void find_moments( Mat src );1213int main(int argc, char** argv)14{15/// Load source image, convert it to gray16Mat src, gray;17src = imread(argv[1], 1 );1819cvtColor( src, gray, COLOR_BGR2GRAY );2021namedWindow( "Source", WINDOW_AUTOSIZE );22imshow( "Source", src );23// call function to find_moments24find_moments( gray );2526waitKey(0);27return(0);28}2930void find_moments( Mat gray )31{32Mat canny_output;33vector<vector<Point> > contours;34vector<Vec4i> hierarchy;3536/// Detect edges using canny37Canny( gray, canny_output, 50, 150, 3 );38// Find contours39findContours( canny_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0) );4041/// Get the moments42vector<Moments> mu(contours.size() );43for( int i = 0; i < contours.size(); i++ )44{ mu[i] = moments( contours[i], false ); }4546/// Get the centroid of figures.47vector<Point2f> mc( contours.size() );48for( int i = 0; i < contours.size(); i++ )49{ mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 ); }505152/// Draw contours5354Mat drawing(canny_output.size(), CV_8UC3, Scalar(255,255,255));5556for( int i = 0; i< contours.size(); i++ )57{58Scalar color = Scalar(167,151,0);59drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );60circle( drawing, mc[i], 4, color, -1, 7, 0 );61}6263/// Show the resultant image64namedWindow( "Contours", WINDOW_AUTOSIZE );65imshow( "Contours", drawing );66waitKey(0);6768}697071