这个错误是由于输入的数据类型不正确导致的。根据错误信息,函数cv::fitEllipseNoDirect要求输入的数据类型是CV_32F或CV_32S,并且输入的数据数量n必须大于等于0。

要解决这个问题,你可以按照以下步骤操作:

  1. 确保输入的数据类型是CV_32F或CV_32S。你可以使用函数cv::Mat::type()来检查输入数据的类型。如果类型不正确,可以使用函数cv::Mat::convertTo()将数据转换为正确的类型。

  2. 检查输入数据的数量n是否大于等于0。确保你传递给函数的数据数量是正确的。

下面是一个示例代码,用于演示如何解决这个问题:

#include <opencv2/opencv.hpp>

int main()
{
    // 创建一个包含数据的向量
    std::vector<cv::Point> points;
    points.push_back(cv::Point(10, 10));
    points.push_back(cv::Point(20, 20));
    points.push_back(cv::Point(30, 30));

    // 将数据转换为CV_32F类型
    cv::Mat pointsMat(points);
    cv::Mat pointsMat32F;
    pointsMat.convertTo(pointsMat32F, CV_32F);

    // 检查数据的数量是否大于等于0
    if (pointsMat32F.rows >= 0)
    {
        // 使用cv::fitEllipseNoDirect函数
        cv::RotatedRect ellipse = cv::fitEllipseNoDirect(pointsMat32F);
        // ...
    }

    return 0;
}

请根据你的具体情况修改代码,并确保输入数据的类型和数量是正确的。

OpenCV (4.5.3) 错误: Assertion failed (n >= 0 && (depth == CV_32F || depth == CV_32S)) in cv::fitEllipseNoDirect 报错解决方法

原文地址: https://www.cveoy.top/t/topic/p1ff 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录