You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FTC机器人运行OpenCV代码触发(-215)断言失败错误求助

问题分析与解决

核心原因

你遇到的断言错误,根源在于初始化的biggestContour是一个空的MatOfPoint对象。当第一次执行Imgproc.contourArea(biggestContour)时,这个空轮廓没有任何点数据,不满足OpenCVcontourArea函数的输入要求(函数要求轮廓至少包含有效点集,且点的深度为CV_32F或CV_32S),直接触发了断言失败。

修复方案

步骤1:先判断轮廓列表是否为空

在处理轮廓前,先检查contours是否为空,避免空列表遍历或无效操作。

步骤2:正确初始化最大轮廓

不要直接创建空的MatOfPoint,而是在确认contours非空后,将biggestContour初始化为列表中的第一个轮廓,再进行后续比较。

修改后的代码示例:

List<MatOfPoint> contours = new ArrayList<>();
Imgproc.findContours(thresholded, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
contoursAttr = contours;

MatOfPoint biggestContour = null;

// 先检查轮廓列表是否为空
if (!contours.isEmpty()) {
    // 初始化最大轮廓为第一个元素
    biggestContour = contours.get(0);
    for (MatOfPoint curContour : contours) {
        // 额外判断当前轮廓的面积是否有效(避免空轮廓)
        double curArea = Imgproc.contourArea(curContour);
        double biggestArea = Imgproc.contourArea(biggestContour);
        if (curArea > biggestArea) {
            biggestContour = curContour;
        }
    }
}

额外注意事项

  • 调用findContours后,有可能返回的contours列表中存在空的MatOfPoint(比如阈值处理后的图像没有有效轮廓),所以在遍历过程中可以额外判断curContour.empty(),跳过无效轮廓。
  • 确保thresholded是单通道的二值图像(findContours要求输入为8位单通道图像,且非零像素视为前景),如果输入图像格式不对,也可能导致生成的轮廓异常。

内容的提问来源于stack exchange,提问作者technicguy1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:25:20