用python写出区分识别红色圆形和蓝色矩形的代码,识别到红色圆形返回信号为coco,识别到蓝色矩形返回信号为lock
时间: 2024-02-11 10:03:38 浏览: 157
labelme:使用Python的图像多边形注释(多边形,矩形,圆形,直线,点和图像级标记注释)
5星 · 资源好评率100%
好的,以下是使用OpenCV和Python实现识别红色圆形和蓝色矩形的代码:
```python
import cv2
# 加载图像
image = cv2.imread("example.png")
# 转换为HSV颜色空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义红色和蓝色的HSV范围
lower_red = (0, 50, 50)
upper_red = (10, 255, 255)
lower_blue = (110, 50, 50)
upper_blue = (130, 255, 255)
# 创建蒙版并进行掩膜操作
mask_red = cv2.inRange(hsv, lower_red, upper_red)
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
mask = mask_red + mask_blue
result = cv2.bitwise_and(image, image, mask=mask)
# 阈值化和轮廓检测
gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓并识别形状和颜色
for contour in contours:
area = cv2.contourArea(contour)
if area > 500:
# 计算周长
perimeter = cv2.arcLength(contour, True)
# 近似多边形轮廓
approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True)
# 判断形状
if len(approx) == 4:
# 矩形
x, y, w, h = cv2.boundingRect(contour)
if cv2.contourArea(contour) > 500:
cv2.putText(image, "lock", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 2)
elif len(approx) > 8:
# 圆形
(x, y), radius = cv2.minEnclosingCircle(contour)
if cv2.contourArea(contour) > 500:
cv2.putText(image, "coco", (int(x - radius), int(y - radius)), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 2)
# 显示结果
cv2.imshow("Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意,这个代码假设输入图像`example.png`已经包含了红色圆形和蓝色矩形。如果输入图像中没有这些形状,那么代码将无法识别它们。此外,代码中设置了一定的阈值和面积大小来排除一些噪点和非目标形状。你可以根据需要进行调整。
阅读全文