上述代码中drawContours函数绘制出的图像没有轮廓
时间: 2024-05-19 16:15:51 浏览: 76
可能的原因是:
1. 绘制轮廓时没有指定轮廓的颜色或线宽,导致轮廓无法显示出来。
2. 轮廓没有正确提取出来,可能是因为二值化阈值设置不合适,或者图像预处理过程中产生了噪点等影响轮廓提取的因素。
3. 绘制轮廓时使用的图像尺寸和原始图像尺寸不一致,导致轮廓显示位置不正确。
解决方法:
1. 在绘制轮廓时,指定轮廓的颜色和线宽,例如:
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
2. 检查轮廓提取的过程,尝试调整二值化阈值或使用其他图像处理方法,确保轮廓能够正确提取出来。
3. 确保绘制轮廓时使用的图像尺寸和原始图像尺寸一致,例如:
img = cv2.resize(img, (width, height))
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
相关问题
可以使用 cv2.drawContours 函数将轮廓绘制到原始图像上
是的,可以使用cv2.drawContours函数将轮廓绘制到原始图像上。具体代码如下:
```python
import cv2
# 读取原始图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行阈值分割
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
# 显示绘制后的图像
cv2.imshow('Contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,cv2.drawContours函数有以下参数:
- img:原始图像
- contours:轮廓
- contourIdx:绘制哪个轮廓,如果为-1,则绘制所有轮廓
- color:轮廓颜色(BGR格式)
- thickness:轮廓线条宽度
运行代码后,会将绘制好轮廓的图像显示出来。
drawContours 绘制全部轮廓
drawContours是OpenCV中用于绘制轮廓的函数,它可以绘制所有的轮廓或指定的轮廓。函数原型如下:
```python
cv2.drawContours(image, contours, contourIdx, color, thickness, lineType, hierarchy, maxLevel, offset)
```
其中参数含义如下:
- image:要绘制轮廓的图像;
- contours:所有轮廓点的列表,每个轮廓由点的列表表示;
- contourIdx:要绘制的轮廓的索引,如果为负数,则绘制所有轮廓;
- color:绘制轮廓的颜色;
- thickness:绘制轮廓的线宽,如果为负数或CV_FILLED,则填充轮廓;
- lineType:线条类型;
- hierarchy:轮廓的层级结构;
- maxLevel:要绘制的最大层级,如果为0,则绘制所有层级;
- offset:偏移量。
如果contourIdx参数为负数,则会绘制所有的轮廓。示例代码如下:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制全部轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
# 显示结果
cv2.imshow('contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文