cv::TermCriteria term(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, maxCount, epsilon);优化成在opencv4.6中能用的
时间: 2024-03-25 21:41:59 浏览: 20
在 OpenCV 4.6 中,可以使用如下方式来优化 `cv::TermCriteria` 的创建:
```
cv::TermCriteria term(cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS, maxCount, epsilon);
```
其中,`cv::TermCriteria::MAX_ITER` 和 `cv::TermCriteria::EPS` 分别表示最大迭代次数和迭代误差的最小值。使用`+`运算符将它们组合在一起,就可以创建具有相同功能的 `cv::TermCriteria` 对象。然后,您可以像以前一样使用该对象来设置迭代算法的停止条件。
相关问题
CV_TERMCRIT_ITER在opencv4.6变成啥了
CV_TERMCRIT_ITER 是 OpenCV 中的一个常量,用于指定迭代算法的停止条件之一,即达到指定的迭代次数时停止迭代。在 OpenCV 4.6 版本中,CV_TERMCRIT_ITER 常量被重命名为 cv::TermCriteria::MAX_ITER。
因此,如果您的代码中使用了 CV_TERMCRIT_ITER 常量,您需要将其替换为 cv::TermCriteria::MAX_ITER。例如,如果您的代码中有以下语句:
```
cvTermCriteria(criteria_type, max_iter, CV_TERMCRIT_ITER);
```
您需要将其修改为:
```
cv::TermCriteria(criteria_type, max_iter, cv::TermCriteria::MAX_ITER);
```
这样就可以在 OpenCV 4.6 版本中使用该代码了。
cornerSubpix(imageGray,corners,Size(11,11),size(-1,-1),TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,0.1));报错
`cornerSubpix()` 函数报错可能是因为 OpenCV 版本更新引起的函数参数改变。从 OpenCV 3.0 版本开始,函数参数中的 `CV_TERMCRIT_EPS` 和 `CV_TERMCRIT_ITER` 被改为 `cv::TermCriteria::EPS` 和 `cv::TermCriteria::MAX_ITER`。
如果你使用的是 OpenCV 3.0 及以上版本,可以将代码中的 `CV_TERMCRIT_EPS` 和 `CV_TERMCRIT_ITER` 改为 `cv::TermCriteria::EPS` 和 `cv::TermCriteria::MAX_ITER`。
例如:
```
cv::Mat imageGray;
std::vector<cv::Point2f> corners;
cv::Size winSize(11, 11);
cv::TermCriteria criteria(cv::TermCriteria::EPS + cv::TermCriteria::MAX_ITER, 30, 0.1);
cv::cornerSubPix(imageGray, corners, winSize, cv::Size(-1, -1), criteria);
```
如果你使用的是 OpenCV 2.x 版本,应该使用 `CV_TERMCRIT_ITER` 和 `CV_TERMCRIT_EPS`,例如:
```
cv::Mat imageGray;
std::vector<cv::Point2f> corners;
cv::Size winSize(11, 11);
cv::TermCriteria criteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 30, 0.1);
cv::cornerSubPix(imageGray, corners, winSize, cv::Size(-1, -1), criteria);
```
如果以上方法都不能解决问题,可以尝试检查 OpenCV 版本是否正确安装,以及是否正确链接 OpenCV 库。