Opencv的drawContours函数在c++中如何使用
时间: 2024-05-04 09:19:43 浏览: 80
在C++中使用OpenCV的`drawContours`函数可以绘制轮廓。该函数的语法如下:
```cpp
void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness = 1, int lineType = LINE_8, InputArray hierarchy = noArray(), int maxLevel = INT_MAX, Point offset = Point())
```
参数解释:
- `image`:输入输出图像,即要在其上绘制轮廓的图像。
- `contours`:轮廓点序列的向量,每个向量存储一个轮廓。多个轮廓存储在一个向量中。
- `contourIdx`:要绘制的轮廓的索引,若为负数则绘制所有轮廓。
- `color`:轮廓线条的颜色。
- `thickness`:轮廓线条的宽度,默认值为1。
- `lineType`:线条类型,可以是`LINE_8`或`LINE_4`。
- `hierarchy`:可选的输入向量,存储轮廓的层次结构信息。
- `maxLevel`:绘制轮廓的最大层级。
- `offset`:偏移量,即从轮廓到图像的偏移量。
示例代码:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("test.jpg");
cvtColor(img, img, COLOR_BGR2GRAY);
threshold(img, img, 100, 255, THRESH_BINARY_INV);
std::vector<std::vector<Point>> contours;
findContours(img, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);
Mat dst = Mat::zeros(img.size(), CV_8UC3);
for (int i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(rand() % 256, rand() % 256, rand() % 256);
drawContours(dst, contours, i, color, 2);
}
imshow("contours", dst);
waitKey(0);
return 0;
}
```
以上代码加载一张图片,将其转换为灰度图并二值化。然后使用`findContours`函数获取轮廓点的向量,最后使用`drawContours`函数绘制轮廓线条。在绘制时可以设置每个轮廓的颜色和宽度。
阅读全文