get convex hull of isolated shapes with openCV/C++
Try dilation, a technique used to enlargen light spots over darker spots in an image.

Start by dilating the image such that many of the enlargened white blobs will overlap and form a complete connected contour, as such:



Now, when OpenCV finds contours from this large figure to make convex hulls, it will find a complete circle rather than loose seperate blobs.

 

From here, you can find the largest contour, which is the (outer) largest light-purple contour.

Here is the code for this (which currently computes the contours, but not the largest area - this is just to demonstrate the dilation):

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
 Mat src; Mat src_gray;
 src = imread( "convex.jpg", 1 );
 //resize(src, src, Size(640,480), 0, 0, INTER_CUBIC);
 cvtColor( src, src_gray, CV_BGR2GRAY );

 namedWindow( "Source", CV_WINDOW_AUTOSIZE );



 //Dilate
 int erosion_size =10;
  Mat element = getStructuringElement(cv::MORPH_ELLIPSE,
        cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),
        cv::Point(erosion_size, erosion_size) );

 dilate(src_gray,src_gray,element);

 imshow( "Source", src_gray );

 // Convex Hull implementation
 Mat src_copy = src_gray.clone();
 Mat threshold_output;
 vector&lt;vector&lt;Point&gt; &gt; contours;
 vector&lt;Vec4i&gt; hierarchy;

 // Find contours
 threshold( src_gray, threshold_output, 200, 255, THRESH_BINARY );
 findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

 // Find the convex hull object for each contour
 vector&lt;vector&lt;Point&gt; &gt;hull( contours.size() );
 for( int i = 0; i &lt; contours.size(); i++ )
 {  convexHull( Mat(contours[i]), hull[i], false ); }

 // Draw contours + hull results
 RNG rng;
 Mat drawing = Mat::zeros( threshold_output.size(), CV_8UC3 );
 for( int i = 0; i&lt; contours.size(); i++ )
 {
  Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
  //drawContours( drawing, contours, i, color, 1, 8, vector&lt;Vec4i&gt;(), 0, Point() );
  drawContours( drawing, hull, i, color, 1, 8, vector&lt;Vec4i&gt;(), 0, Point() );
 }

 // Show in a window
 namedWindow( "Hull demo", CV_WINDOW_AUTOSIZE );
 imshow( "Hull demo", drawing );

 waitKey(0);
 return(0);
}