python opencv识别两种颜色
时间: 2023-09-21 16:10:36 浏览: 96
要使用 OpenCV 识别两种颜色,可以使用以下步骤:
1. 将图像转换为 HSV 颜色空间,这可以通过 `cv2.cvtColor()` 函数来实现。
2. 定义两个颜色的范围,可以使用 `cv2.inRange()` 函数来创建颜色范围的掩码。
3. 将两个颜色范围的掩码相加,这可以通过 `cv2.bitwise_or()` 函数来实现。
4. 对生成的掩码进行形态学操作,例如膨胀或腐蚀,以去除噪声或填补空洞。
5. 找到图像中两种颜色的轮廓,可以使用 `cv2.findContours()` 函数来实现。
6. 对每个颜色的轮廓进行处理,例如计算轮廓的面积或绘制轮廓。
下面是一个示例代码,可以识别红色和蓝色:
```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, 50, 50])
upper_red = np.array([10, 255, 255])
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])
# 创建颜色范围的掩码
mask_red = cv2.inRange(hsv, lower_red, upper_red)
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
# 将两个掩码相加
mask = cv2.bitwise_or(mask_red, mask_blue)
# 对掩码进行形态学操作
kernel = np.ones((5,5), np.uint8)
mask = cv2.erode(mask, kernel)
mask = cv2.dilate(mask, kernel)
# 找到轮廓
contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 处理每个颜色的轮廓
for contour in contours:
area = cv2.contourArea(contour)
if area > 500:
cv2.drawContours(img, contour, -1, (0, 255, 0), 3)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先读取了一张图像,并将其转换为 HSV 颜色空间。然后,我们定义了红色和蓝色的范围,并使用 `cv2.inRange()` 函数创建了两个颜色范围的掩码。接下来,我们使用 `cv2.bitwise_or()` 函数将两个掩码相加,并对生成的掩码进行了形态学操作,以去除噪声或填补空洞。最后,我们使用 `cv2.findContours()` 函数找到了两种颜色的轮廓,并对每个颜色的轮廓进行了处理。
阅读全文