使用c++和opencv的凸包检测,绘制出贴合轮廓的边缘线
时间: 2023-05-16 21:07:03 浏览: 170
可以使用 OpenCV 中的函数 cv::convexHull() 来计算凸包,然后使用 cv::polylines() 函数绘制出凸包的边缘线。以下是示例代码:
```
#include <opencv2/opencv.hpp>
int main()
{
// 读取图像
cv::Mat image = cv::imread("input.jpg");
// 转换为灰度图像
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
// 二值化
cv::Mat binary;
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 = image.clone();
for (const auto& contour : contours)
{
std::vector<cv::Point> hull;
cv::convexHull(contour, hull);
cv::polylines(result, hull, true, cv::Scalar(0, 0, 255), 2);
}
// 显示结果
cv::imshow("Result", result);
cv::waitKey();
return 0;
}
```
这段代码可以读取名为 "input.jpg" 的图像,对其进行凸包检测,并绘制出边缘线。你可以将其保存为一个名为 "main.cpp" 的文件,然后使用 CMake 或者其他编译工具进行编译。
阅读全文