Вы можете:
1) создать маску из своего контура
2) Вычислить distanceTransform
намаска
3) Наибольшее значение - радиус, его положение - центр
код:
#include <opencv2\opencv.hpp>
int main()
{
// Load image
cv::Mat1b img = cv::imread("path_to_img", cv::IMREAD_GRAYSCALE);
// Correct image
cv::Mat1b bin = img < 127;
// Find contour
std::vector<std::vector<cv::Point>> contours;
cv::findContours(bin, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// Draw on mask
cv::Mat1b mask(bin.rows, bin.cols, uchar(0));
cv::drawContours(mask, contours, 0, cv::Scalar(255), cv::FILLED);
// Distance Trasnsform
cv::Mat1f dt;
cv::distanceTransform(mask, dt, cv::DIST_L2, 5, cv::DIST_LABEL_PIXEL);
// Find max value
double max_val;
cv::Point max_loc;
cv::minMaxLoc(dt, nullptr, &max_val, nullptr, &max_loc);
// Output image
cv::Mat3b out;
cv::cvtColor(img, out, cv::COLOR_GRAY2BGR);
cv::circle(out, max_loc, max_val, cv::Scalar(0, 255, 0));
return 0;
}