error: ‘CV_CHAIN_APPROX_SIMPLE’ was not declared in this scope 29 | findContours(edges, contours, cv::RetrievalModes::RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); | ^~~~~~~~~~~~~~~~~~~~~~
时间: 2023-06-30 08:15:14 浏览: 250
这个错误提示说明在你的代码中使用了OpenCV2.x中的API。在OpenCV3.x及更高版本中,常量CV_CHAIN_APPROX_SIMPLE已经被改为cv::CHAIN_APPROX_SIMPLE。你可以尝试将代码中的CV_CHAIN_APPROX_SIMPLE替换为cv::CHAIN_APPROX_SIMPLE,然后重新编译。如果还有其他类似问题,可以查阅OpenCV官方文档来获取最新的API。
相关问题
red_contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) blue_contours, _ = cv2.findContours(blue_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) green_contours, _ = cv2.findContours(green_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) yellow_contours, _ = cv2.findContours(yellow_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
这段代码使用OpenCV库的`findContours`函数来检测每个颜色掩码中的轮廓。以下是代码示例:
```python
import cv2
red_contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
blue_contours, _ = cv2.findContours(blue_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
green_contours, _ = cv2.findContours(green_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
yellow_contours, _ = cv2.findContours(yellow_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
在这个例子中,`findContours`函数接受三个参数:输入的二值图像、轮廓检索模式和轮廓近似方法。对于每个颜色掩码,我们分别使用`RETR_EXTERNAL`模式来检测外部轮廓,并使用`CHAIN_APPROX_SIMPLE`方法进行简单的轮廓近似。函数返回两个值,第一个是轮廓列表(在这里我们将其赋值给`red_contours`、`blue_contours`、`green_contours`和`yellow_contours`),第二个是层次结构(在这里我们使用下划线表示我们不关心它)。这样,你可以使用这些轮廓列表来进一步处理和分析检测到的颜色区域。
bool isPolygonInside(const std::vector<cv::Point>& polygon1, const std::vector<cv::Point>& polygon2, double& outsideArea) { // Check if all vertices of polygon1 are inside polygon2 bool allInside = true; for (const auto& vertex : polygon1) { double distance = cv::pointPolygonTest(polygon2, vertex, true); if (distance < 0) { allInside = false; break; } } if (allInside) { return true; } // Polygon1 is partially or completely outside polygon2 std::vector<std::vector<cv::Point>> intersectionPolygon; // 修改此处 if (cv::isContourConvex(polygon1) && cv::isContourConvex(polygon2)) { cv::Mat intersectionMat; cv::intersectConvexConvex(cv::Mat(polygon1), cv::Mat(polygon2), intersectionMat); if (cv::countNonZero(intersectionMat) > 0) { cv::findContours(intersectionMat, intersectionPolygon, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); } } else { std::vector<cv::Point> hull1, hull2; cv::convexHull(polygon1, hull1); cv::convexHull(polygon2, hull2); std::vector<cv::Point> hullIntersection; cv::convexHull(hull1, hullIntersection, false, false); cv::fillConvexPoly(cv::Mat(hullIntersection), hull2, cv::Scalar(0), false); cv::findContours(cv::Mat(hullIntersection), intersectionPolygon, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); } if (intersectionPolygon.empty()) { outsideArea = 0; return false; } double intersectionArea = std::abs(cv::contourArea(intersectionPolygon[0])); // 修改此处 double polygon1Area = std::abs(cv::contourArea(polygon1)); outsideArea = polygon1Area - intersectionArea; return true; // 修改此处 } 这个是你给的代码,运行后提示报错:terminate called after throwing an instance of 'cv::Exception' what(): OpenCV(4.5.0) /home/sniper/Downloads/opencv-4.5.0/modules/imgproc/src/contours.cpp:195: error: (-210:Unsupported format or combination of formats) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function 'cvStartFindContours_Impl'
根据报错信息,问题可能出现在 `cv::findContours()` 函数中。这个函数要求输入的图像是 CV_8UC1 格式的,但是你传递给函数的参数类型可能不正确。请检查你传递给 `cv::findContours()` 函数的参数类型是否正确。如果你的图像不是 CV_8UC1 格式,可以尝试将它转换为正确的格式。如果你仍然无法解决问题,请提供更多的代码和上下文信息,以便我可以更好地帮助你解决这个问题。
阅读全文