pythonopencv图像轮廓
时间: 2024-12-31 17:27:08 浏览: 2
### 使用Python OpenCV实现图像轮廓检测
为了使用 Python 和 OpenCV 实现图像轮廓检测,需遵循一系列处理步骤来准备和分析图像数据。
#### 准备工作
首先导入必要的库并加载待处理的图像:
```python
import cv2
import numpy as np
img = cv2.imread('shapes.png')
```
接着将彩色图像转换成灰度图以便后续操作更简单高效[^1]:
```python
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
#### 边缘检测与二值化
应用边缘检测算法(如Canny)以及阈值处理使图像变为黑白两色,突出显示物体边界:
```python
edges = cv2.Canny(gray, 50, 150)
_, thresh = cv2.threshold(edges, 127, 255, 0)
```
#### 轮廓查找
利用 `findContours` 方法获取图像内的所有封闭曲线即轮廓,并可选择只保留外部轮廓以简化结果集。这里采用 RETR_EXTERNAL 参数仅提取最外层轮廓[^3]:
```python
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
对于每一个找到的轮廓,还可以进一步计算其几何特性比如面积大小用于筛选感兴趣的对象:
```python
for contour in contours[:5]: # 只取前五个轮廓作为例子展示
area = cv2.contourArea(contour)
print(f'Contour Area: {area}')
if area > 100: # 假设设定最小面积过滤条件为100像素平方
(x,y),radius = cv2.minEnclosingCircle(contour) # 计算最小包围圆[^2]
center = (int(x), int(y))
radius = int(radius)
img_with_circle = cv2.circle(img.copy(), center, radius, (0, 255, 0), 2)
cv2.imshow('Detected Shapes', img_with_circle)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码片段展示了如何读入图片、转化为灰度模式、执行边缘增强及二值分割、定位目标物轮廓并通过绘制圆形标注出来。最终通过窗口显示带有标记的结果图像给用户查看[^4]。
阅读全文