opencv drawcontours函数
时间: 2023-04-28 09:02:19 浏览: 92
OpenCV中的drawContours函数是用来绘制轮廓的函数。它可以在图像上绘制指定轮廓的边界线。该函数需要传入三个参数:绘制轮廓的图像、轮廓的点集、轮廓的索引。可以通过设置参数来控制绘制的线条颜色、粗细等属性。该函数可以用于图像分割、形状识别等领域。
相关问题
opencv drawContours函数
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)
opencv drawcontours
drawContours是OpenCV图像处理库中的一个函数,用于绘制轮廓。它接受输入图像、轮廓数据、轮廓索引、颜色、线条宽度等参数,并将绘制结果应用于输入图像。
对于Python,drawContours的原型如下:
image = cv.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])
对于C++,drawContours的原型如下:
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())
使用drawContours函数时,可以通过调整轮廓索引参数contourIdx进行迭代处理,以实现对每个轮廓的单独填充绘制。
以下是一个使用迭代处理的示例代码:
int idx = 0;
for (; idx >= 0; idx = hierarchy[idx][0]) {
Scalar color(rand() & 255, rand() & 255, rand() & 255);
drawContours(dst, contours, idx, color, FILLED, 8, hierarchy);
}
阅读全文