是否有OpenCV函数可以确定轮廓是否为圆形?
fitEllipse()
似乎适用于任何轮廓(如果我错了,请更正我,我做了快速测试)。
isContourConvex()
甚至不会发现我最好的圈子。
我正在尝试检测比萨饼(相机是一个角度,所以披萨形状是椭圆形)。 HoughCircles
适用于披萨的一般位置,但不适用于披萨的椭圆形状(它要么发现圆圈太小或太大)。
static void detectPizzas(const Mat& roi)
{
Mat blur, edges;
GaussianBlur(roi, blur, Size(3, 3), 0);
Canny(blur, edges, 200, 275);
dilate(edges, edges, getStructuringElement(CV_SHAPE_ELLIPSE, { 3, 3 }));
std::vector<std::vector<Point>> contours;
findContours(edges, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
// Following draws ellipses to all contours that aren't even circular.
// How can I discriminate between 'circular' contours and non-circular contours?
for (int i = 0; i < contours.size(); i++)
{
// Doesn't detect any ellipses
//if (!isContourConvex(contours[i]))
// continue;
RotatedRect r = fitEllipse(contours[i]);
ellipse(edges, r, { 125 }, 2);
}
imshow("edges", edges);
}
示例图片: