drawContours()函数怎么使用
时间: 2023-05-23 16:03:54 浏览: 91
drawContours()函数是OpenCV中用来绘制轮廓的函数,可以绘制的轮廓可以是任意形状的。该函数的语法为:
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表示轮廓的线宽,lineType表示轮廓的线类型,hierarchy表示轮廓的层次结构,maxLevel表示最大的轮廓层数,offset表示偏移量。
例如,可以使用以下代码绘制一个名为"contour.png"的图像中的所有轮廓:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{
Mat src = imread("contour.png");
if (src.empty()) {
std::cout << "failed to open file" << std::endl;
return 0;
}
// 转为灰度图像
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// 二值化
Mat binary;
threshold(gray, binary, 0, 255, THRESH_BINARY|THRESH_OTSU);
// 查找轮廓
std::vector<std::vector<Point>> contours;
std::vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
// 绘制轮廓
Mat dst(src.size(), CV_8UC3, Scalar::all(0));
for (size_t i = 0; i < contours.size(); i++) {
drawContours(dst, contours, i, Scalar(0, 0, 255), 2, LINE_8, hierarchy);
}
imwrite("contour_draw.png", dst);
return 0;
}
阅读全文