python的opencv形状识别代码
时间: 2023-09-11 19:12:28 浏览: 194
以下是一个使用Python和OpenCV进行形状识别的示例代码:
```python
import cv2
import numpy as np
def get_shape_name(approx):
# 获取多边形的顶点数
sides = len(approx)
if sides == 3:
return 'Triangle'
elif sides == 4:
# 获取矩形的宽高比
(x, y, w, h) = cv2.boundingRect(approx)
aspect_ratio = float(w) / h
if aspect_ratio >= 0.95 and aspect_ratio <= 1.05:
return 'Square'
else:
return 'Rectangle'
elif sides == 5:
return 'Pentagon'
elif sides == 6:
return 'Hexagon'
else:
return 'Other'
# 读取图像
image = cv2.imread('shapes.jpg')
# 将图像转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测算法进行边缘检测
edges = cv2.Canny(gray, 50, 150)
# 寻找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓
for contour in contours:
# 进行多边形逼近
epsilon = 0.02 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)
# 获取形状名称
shape_name = get_shape_name(approx)
# 绘制轮廓和形状名称
cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)
x = approx.ravel()[0]
y = approx.ravel()[1] - 10
cv2.putText(image, shape_name, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 显示图像
cv2.imshow('Shape Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
请注意,此示例代码需要将待识别形状的图像保存为名为"shapes.jpg"的文件,并与代码文件位于同一目录下。代码将读取图像并将其转换为灰度图像,然后使用Canny边缘检测算法进行边缘检测。接下来,寻找轮廓,并对每个轮廓进行多边形逼近。根据逼近得到的顶点数,确定形状的名称,并在图像上绘制轮廓和形状名称。
请根据实际情况进行适当调整和优化代码。
阅读全文