drawContours 中的轮廓为什么要加[]
时间: 2023-11-30 19:31:32 浏览: 28
在 OpenCV 的 drawContours 函数中,参数 contours 是一个包含轮廓点集的向量,而该向量又包含了多个轮廓。因此,我们需要将轮廓点集放入一个向量中,并且将这个向量作为参数传递给 drawContours 函数。
由于可能存在多个轮廓,因此我们使用一个包含多个向量的向量(即二维向量)来存储这些轮廓点集。而每个轮廓点集就是一个一维向量,其中包含了每个点的坐标。
因此,在调用 drawContours 函数时,需要将这个二维向量作为参数传递给 contours 参数,并且使用一对方括号 [] 包裹起来,表示这是一个包含多个轮廓的向量。
相关问题
drawContours 画轮廓填充线
`drawContours()` 是 OpenCV 中的一个函数,用于在图像上绘制轮廓线或填充轮廓区域。当你有一个二进制图像或者灰度图像并且已经通过边缘检测或其他方法得到了轮廓信息(轮廓点序列),`drawContours` 可以帮助你可视化这些轮廓。
该函数的基本原型通常是这样的:
```cpp
void drawContours(Mat& img, std::vector<std::vector<Point>>& contours, int contourIdx, Scalar color, int thickness, bool filled = false);
```
参数解释:
- `img`:输入图像,可以是原始的单通道或彩色图像。
- `contours`:存储轮廓点集合的向量。
- `contourIdx`:想要绘制的轮廓索引。如果为 -1,则会绘制所有轮廓。
- `color`:轮廓线条的颜色。
- `thickness`:轮廓线的宽度。
- `filled`:布尔值,指定是否填充轮廓内部(true)或只画外边框(false,默认)。
举个例子,如果你有一组轮廓,你可以像这样使用它:
```cpp
std::vector<std::vector<Point>> contours; // 轮廓信息
Mat image = imread("your_image.jpg"); // 读取图片
cv::drawContours(image, contours, 0, cv::Scalar(0, 0, 255), 2); // 画出第一个轮廓,红色,线宽2
cv::imshow("Contours", image); // 显示结果
```
cv2.drawContours绘制轮廓颜色怎样设置为蓝色
可以使用cv2.drawContours函数中的color参数来设置绘制轮廓的颜色。颜色可以通过BGR三个颜色通道的数值来指定。因此,将蓝色通道设置为255,其余两个通道设置为0,即可得到蓝色。
以下是一个示例代码,将轮廓颜色设置为蓝色:
```
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (255, 0, 0), 2)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,cv2.drawContours函数的color参数设置为(255, 0, 0),表示蓝色。