使用opencv写一个多物体形状检测的程序
时间: 2024-03-08 12:48:45 浏览: 115
下面是一个使用OpenCV进行多物体形状检测的程序示例:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('shapes.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)
# 遍历每个轮廓
for cnt in contours:
# 计算轮廓周长
perimeter = cv2.arcLength(cnt, True)
# 进行轮廓近似
approx = cv2.approxPolyDP(cnt, 0.02 * perimeter, True)
# 根据近似后的轮廓点数来确定形状
if len(approx) == 3:
shape = "Triangle"
elif len(approx) == 4:
(x, y, w, h) = cv2.boundingRect(approx)
ratio = w / float(h)
# 判断矩形还是正方形
if ratio >= 0.95 and ratio <= 1.05:
shape = "Square"
else:
shape = "Rectangle"
else:
shape = "Circle"
# 在图像中标注形状
cv2.drawContours(img, [approx], -1, (0, 255, 0), 2)
cv2.putText(img, shape, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)
# 显示结果
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个程序可以读取一张形状图像,检测其中的多个物体并标注它们的形状。具体实现步骤如下:
1. 读取图像并将其转换为灰度图像。
2. 对灰度图像进行二值化处理,得到黑白图像。
3. 对黑白图像进行轮廓检测,得到所有物体的轮廓。
4. 遍历每个轮廓,首先计算轮廓的周长。
5. 对轮廓进行近似处理,得到近似后的轮廓。
6. 根据近似后的轮廓点数来确定形状,如果点数为3则为三角形,如果为4则进一步判断是矩形还是正方形,否则为圆形。
7. 在图像中标注形状。
8. 显示结果。
注意,这个程序只是一个简单示例,实际应用中可能需要根据具体需求进行修改和优化。
阅读全文