写一个opencv c++查找绘制子轮廓
时间: 2023-03-26 09:02:41 浏览: 87
好的,我可以回答这个问题。要查找和绘制子轮廓,可以使用 OpenCV 中的 findContours() 和 drawContours() 函数。具体步骤如下:
1. 读取图像并转换为灰度图像。
2. 对图像进行二值化处理。
3. 使用 findContours() 函数查找轮廓。
4. 对每个轮廓使用 drawContours() 函数绘制子轮廓。
以下是示例代码:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像并转换为灰度图像
Mat src = imread("image.jpg");
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// 对图像进行二值化处理
Mat binary;
threshold(gray, binary, , 255, THRESH_BINARY | THRESH_OTSU);
// 查找轮廓
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
// 绘制子轮廓
Mat result = Mat::zeros(src.size(), CV_8UC3);
for (int i = ; i < contours.size(); i++)
{
drawContours(result, contours, i, Scalar(, , 255), 2, LINE_8, hierarchy, );
for (int j = ; j < contours[i].size(); j++)
{
if (hierarchy[i][j][2] != -1)
{
drawContours(result, contours, hierarchy[i][j][2], Scalar(, 255, ), 2, LINE_8);
}
}
}
// 显示结果
imshow("Result", result);
waitKey();
return ;
}
```
希望这个回答能够帮助到你!
阅读全文