帮我写一段基于opencv的识别红色物体大小的代码
时间: 2023-08-28 20:11:27 浏览: 113
好的,以下是一个简单的基于OpenCV的红色物体识别和大小测量代码示例:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 转换颜色空间为HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义红色范围
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
# 将红色范围内的像素设为白色,其他像素设为黑色
mask1 = cv2.inRange(hsv, lower_red, upper_red)
# 定义第二个红色范围
lower_red = np.array([170, 100, 100])
upper_red = np.array([180, 255, 255])
# 将第二个红色范围内的像素设为白色,其他像素设为黑色
mask2 = cv2.inRange(hsv, lower_red, upper_red)
# 将两个掩膜合并
mask = mask1 + mask2
# 对掩膜进行形态学操作,去除噪声
kernel = np.ones((5,5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
# 查找轮廓
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 找到最大轮廓
max_contour = max(contours, key=cv2.contourArea)
# 计算最大轮廓的外接矩形
x, y, w, h = cv2.boundingRect(max_contour)
# 在图像中画出最大轮廓的外接矩形
cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
# 输出红色物体的尺寸
print("Red object size: ", w, " x ", h)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个代码会读取一张图片(`image.jpg`),并使用颜色空间转换将其转换为HSV格式。然后,使用`cv2.inRange()`函数来确定红色范围内的像素,并将它们设为白色,其他像素设为黑色。接着,将两个掩膜合并,进行形态学操作以去除噪声后,使用`cv2.findContours()`函数查找图像中的轮廓。找到最大轮廓并计算其外接矩形,最后在图像中画出该矩形。
阅读全文