C++提取二值图像内轮廓
时间: 2023-07-28 18:07:46 浏览: 109
要提取二值图像的内轮廓,可以使用OpenCV库中的findContours函数。具体步骤如下:
1. 首先读入二值图像并将其转换为灰度图像。
2. 对灰度图像进行二值化处理,确保图像中只有黑色和白色两种像素值。
3. 使用findContours函数寻找轮廓。该函数的第一个参数是输入图像,第二个参数是轮廓的存储容器,第三个参数是轮廓的检索模式,第四个参数是轮廓的近似方法。
4. 对于每个轮廓,可以使用drawContours函数将其绘制出来。
以下是示例代码,假设输入的二值图像为img:
```c++
Mat gray, binary;
cvtColor(img, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
Mat contoursImg = Mat::zeros(img.size(), CV_8UC1);
for (int i = 0; i < contours.size(); i++) {
drawContours(contoursImg, contours, i, Scalar(255), FILLED, LINE_8, hierarchy);
}
imshow("Contours", contoursImg);
waitKey(0);
```
注意,以上代码仅提取了图像的内轮廓。如果需要提取外轮廓或所有轮廓,可以调整findContours函数的第三个参数。
阅读全文