OpenCV (4.5.3) 错误: Assertion failed (n >= 0 && (depth == CV_32F || depth == CV_32S)) in cv::fitEllipseNoDirect 报错解决方法
这个错误是由于输入的数据类型不正确导致的。根据错误信息,函数cv::fitEllipseNoDirect要求输入的数据类型是CV_32F或CV_32S,并且输入的数据数量n必须大于等于0。
要解决这个问题,你可以按照以下步骤操作:
-
确保输入的数据类型是CV_32F或CV_32S。你可以使用函数cv::Mat::type()来检查输入数据的类型。如果类型不正确,可以使用函数cv::Mat::convertTo()将数据转换为正确的类型。
-
检查输入数据的数量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;
}
请根据你的具体情况修改代码,并确保输入数据的类型和数量是正确的。
原文地址: https://www.cveoy.top/t/topic/p1ff 著作权归作者所有。请勿转载和采集!