¿Cómo puedo obtener el círculo de cierre mínimo con OPENCV?
Estoy usandocv::minEnclosingCircle(...)
para obtener el círculo mínimo que evoluciona exactamente mi contorno, pero estoy obteniendo un círculo un poco más grande.
En otras palabras, estoy tratando de obtener algo como esto:
Pero estoy obteniendo esto (el círculo):
Observe cómo el círculo es un poco más grande que el elemento a encerrar.
Necesito encerrar mi objeto en un círculo, no en una elipse.
Gracias de antemano.
Este es mi código:
cv::vector<cv::Point> allPixels;
int columnas = img.cols, filas = img.rows;
cv::Point pt;
for(int col = 0; col < columnas; col++){
for(int row = 0; row < filas; row++){
int val = img.at<uchar>(row,col);
if(val == 255){
pt.x = col;
pt.y = row;
allPixels.push_back(pt);
}
}
}
cv::Mat dispImage = img.clone();
cv::Point2f center;
float radius;
cv::minEnclosingCircle(allPixels,center,radius);
cv::circle(dispImage,center,radius,cv::Scalar(128),1);
cv::circle(dispImage,center,1,cv::Scalar(128),1);
cv::imwrite("Enclosing_Result.png",dispImage);
Con 'img' a cv :: Mat con tamaño (760,760) y formato CV_8UC1. El resultado final ("Enclosing_Result.png") es el siguiente:
Y mi objetivo es el siguiente (dibujado):