opencv python识别图形
时间: 2025-05-23 13:01:51 AIGC 浏览: 27
### 使用Python和OpenCV实现图形检测与识别
要使用Python和OpenCV进行图形检测与识别,通常需要以下几个核心步骤:加载图像、转换为灰度图、边缘检测以及轮廓提取。以下是完整的代码示例:
#### 加载必要的库并初始化环境
为了运行下面的代码,请先确认已成功安装`opencv-python`[^1]。
```python
import cv2
import numpy as np
```
#### 图像预处理
读取输入图像,并将其转换为灰度模式以便后续操作更加高效。
```python
# 读取原始图像
image = cv2.imread('shapes.png')
# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 对灰度图像应用高斯模糊以减少噪声
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
```
#### 边缘检测
利用Canny算法来检测图像中的边缘。
```python
edges = cv2.Canny(blurred_image, threshold1=30, threshold2=100)
```
#### 轮廓检测
通过查找二值化后的图像中的轮廓来进行形状分析。
```python
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
#### 形状分类
对于每一个找到的轮廓,计算其近似多边形并通过顶点数量判断具体是什么类型的几何图形。
```python
for contour in contours:
epsilon = 0.02 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)
if len(approx) == 3:
shape_name = "Triangle"
elif len(approx) == 4:
x, y, w, h = cv2.boundingRect(approx)
aspect_ratio = float(w)/h
if 0.95 <= aspect_ratio <= 1.05:
shape_name = "Square"
else:
shape_name = "Rectangle"
elif len(approx) == 5:
shape_name = "Pentagon"
elif len(approx) >= 6 and len(approx) <= 8:
shape_name = "Circle"
# 绘制边界框及标注名称
M = cv2.moments(contour)
if M['m00'] != 0.0:
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
cv2.putText(image, shape_name, (cx-30, cy), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
```
#### 显示结果
最后展示带有标记的结果图片。
```python
cv2.imshow('Shapes', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述脚本实现了基本的形状检测功能,能够区分三角形、正方形/矩形、五角星以及其他圆形物体等常见几何图案[^2]。
阅读全文
相关推荐


















