Como posso obter o círculo mínimo de fechamento com OPENCV?
estou a usarcv::minEnclosingCircle(...)
para obter o círculo mínimo que evolui exatamente o meu contorno, mas estou ficando um círculo um pouco maior.
Em outras palavras, estou tentando obter algo assim:
Mas eu estou entendendo isso (o círculo):
Observe como o círculo é um pouco maior que o item a ser fechado.
Eu preciso colocar meu objeto em um círculo, não em uma elipse.
Agradeço antecipadamente.
Este é o meu 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);
Com 'img' a cv :: Mat com tamanho (760.760) e formato CV_8UC1. O resultado final ("Enclosing_Result.png") é o próximo:
E meu objetivo é o seguinte (desenhado):