opencv怎么找出轮廓中心坐标,用C++
时间: 2023-07-08 14:54:48 浏览: 216
opencv寻找轮廓
3星 · 编辑精心推荐
在 OpenCV 中,可以使用 `cv::moments()` 函数找到轮廓的中心坐标。该函数计算轮廓的几何矩,其中包括轮廓的面积、重心等信息。下面是一个示例代码,演示了如何找出轮廓的中心坐标:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat img = cv::imread("test.png");
if(img.empty()) {
return -1;
}
cv::Mat gray, binary;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
cv::threshold(gray, binary, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
cv::Mat result = img.clone();
cv::drawContours(result, contours, -1, cv::Scalar(0, 0, 255), 2);
for(size_t i = 0; i < contours.size(); i++) {
cv::Moments moments = cv::moments(contours[i]);
double cx = moments.m10 / moments.m00;
double cy = moments.m01 / moments.m00;
cv::circle(result, cv::Point(cx, cy), 3, cv::Scalar(255, 0, 0), -1);
}
cv::imshow("Result", result);
cv::waitKey();
return 0;
}
```
在这个示例中,我们首先读取了一张图片,然后将其转换为灰度图,并进行二值化处理。接着,我们使用 `cv::findContours()` 函数找到图像中的轮廓,并将其绘制在一张新的图像上。最后,我们遍历每个轮廓,计算其几何矩,并绘制出中心坐标。
运行上述代码,可以看到绘制了轮廓及其中心坐标的图像。其中,`cv::moments()` 函数的返回值是一个 `cv::Moments` 类型,包括了轮廓的各种信息,例如面积、重心等。在本例中,我们使用 `moments.m10 / moments.m00` 和 `moments.m01 / moments.m00` 分别计算了轮廓的中心坐标。
阅读全文