gpt4 book ai didi

c++ - opencv c++ 中椭圆检测的歧义

转载 作者:太空宇宙 更新时间:2023-11-03 22:12:55 31 4
gpt4 key购买 nike

嘿,我在做过去两周的道路标志检测项目,我遇到了从图像中检测椭圆的主要问题。谁能告诉我如何处理这个问题!!!你可以看到结果和代码。谢谢

Road sign Detection

    vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

findContours(GreyImage, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

for (size_t i = 0; i < contours.size(); i++)
{
Mat pointsf;
Mat(contours[i]).convertTo(pointsf, CV_32F);
RotatedRect box = fitEllipse(pointsf);
ellipse(OrignalImg, box, Scalar(0, 0, 255), 1, 8);
}

最佳答案

来自 OpenCV 文档:http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=fitellipse#fitellipse

The function calculates the ellipse that fits (in a least-squares sense) a set of 2D points best of all.

只要你传递一个轮廓,它就会适合一个椭圆。这是什么意思?考虑点列表。如果我传递代表矩形(角)的点,则可能的输出将是绘制的椭圆。

Fitted ellipse to rectangle Least squares fit

上面的矩形实际上会找到一个“没有错误”的椭圆,因为它适合使用矩形的角。在其他情况下,它会尝试找到适合减少误差的椭圆(例如在带有多边形的图像中)。没关系,只要您将图像中接近椭圆的轮廓传递给它即可。

轮廓(由 findContours 返回)被定义为分隔区域的线。这些区域可以是正方形、三角形或几乎任何形状。您将这些轮廓传递给 fitEllipse 函数;也就是说,您制作了一个穿过这些轮廓的椭圆,无论这些轮廓实际上是否表示椭圆。

正如@Micka 所说,在尝试制作(拟合)椭圆之前,您需要检查给定的轮廓是否实际上是椭圆。可以在 StackOverflow 中找到使用各种方法(例如 HoughCircles、MatchShape、HuTransforms 和 RANSAC)的示例:

关于c++ - opencv c++ 中椭圆检测的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835644/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com