Opencv 从控制中删除轮廓线椭圆

问题描述

我试图找到一个有类似问题的帖子,但没有运气。因此,由于我或多或少是 Opencv 的新手,我希望 smeone 能在这里提供帮助。

我正在尝试从 图像 中检测“未填充”的椭圆。由于图像背景在每一帧上都会发生变化,而且椭圆的大小和位置也会在每一帧上发生变化,因此我需要在每一帧上再次检测它。

我遇到的问题是,在某些帧上出现了一些相似的颜色,它们不是椭圆的一部分,但由于它们具有与椭圆相同颜色范围的一些像素,因此 cv::inRange 方法是也检测到它们,这会导致一些轮廓(见图)。

我正在使用这些点并生成它的凸包,因为我需要检查给定的 cv::Points 是否在椭圆内。但是 cv::convexHull 如果有这些轮廓线,当然会返回一个“破碎的”椭圆。

哪种方法可能是最好的,在每一帧上获得椭圆的点,以创建它的正确 cv::convexHull?或者是否有另一种方法可以从图像中提取椭圆并使用它来检查给定的点是否在其中?

这是我当前获取椭圆形的代码:

    cv::Mat image ;
    cv::Mat3b img_hsv;
    cv::Mat1b imgBlackWhite;
    std::vector<cv::Point> result;
    std::vector<cv::Point> nonZeroPts;
    std::vector<std::vector<cv::Point> > contours;

while(true) {
    image = GetNextFrame();
    cv::cvtColor(image,img_hsv,cv::COLOR_BGR2HSV);
    
    inRange(img_hsv,cv::Scalar(90,130,255),cv::Scalar(91,137,imgBlackWhite);
    findNonZero(imgBlackWhite,nonZeroPts);

    if (nonZeroPts.size() == 0)
        return;

    cv::findContours(imgBlackWhite,contours,cv::RETR_TREE,cv::CHAIN_APPROX_SIMPLE);
    cv::convexHull(contours,result);
}

这显示了椭圆以及来自 cv::inRange 和 cv::findContours 的轮廓

enter image description here

预期结果:

enter image description here

希望有人能给我正确的提示。 谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...