opencv drawContours函数
时间: 2023-10-15 12:02:45 浏览: 46
OpenCV的drawContours函数用于在图像上绘制轮廓。
函数原型:
```cpp
void cv::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:输入/输出图像,必须是8位单通道或三通道图像。
- contours:包含所有轮廓的数组,每个轮廓由点的数组表示。
- contourIdx:需要绘制的轮廓的索引,-1表示绘制所有轮廓。
- color:轮廓颜色,如果是三通道图像,则需要使用Scalar(r,g,b)格式。
- thickness:轮廓线条宽度,如果为负值,则表示填充轮廓内部。
- lineType:轮廓线条类型,有LINE_4、LINE_8、LINE_AA可选。
- hierarchy:轮廓层次结构,可选参数,默认值为noArray()。
- maxLevel:最大层级深度,可选参数,默认值为INT_MAX。
- offset:轮廓偏移量,可选参数,默认值为Point()。
示例:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat src = imread("test.png");
Mat gray, binary;
cvtColor(src, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
std::vector<std::vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
Mat dst = Mat::zeros(src.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++)
{
drawContours(dst, contours, i, Scalar(0, 0, 255), 2);
}
imshow("src", src);
imshow("dst", dst);
waitKey();
return 0;
}
```
原图与绘制的轮廓如下所示:
![drawContours](https://img-blog.csdn.net/20180519223224420?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3F3ZXJ0eV9zdmNfMTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80)