python 同一张图中识别多个颜色 形状
时间: 2023-09-29 16:02:55 浏览: 193
可以使用OpenCV库来实现多个颜色和形状的识别。具体步骤如下:
1. 读取图片并将其转换为HSV色彩空间。
2. 分别定义不同颜色和形状的颜色范围和形状模板。
3. 对图片进行颜色过滤,提取出符合颜色范围的像素。
4. 对过滤后的图像进行形状检测,找出符合形状模板的对象。
5. 在原图上标记出符合条件的对象。
以下是一个简单的代码示例,可以根据实际情况做出相应的调整:
```python
import cv2
import numpy as np
# 定义颜色范围和形状模板
color_ranges = [
((0, 100, 100), (10, 255, 255)), # 红色
((30, 100, 100), (60, 255, 255)), # 绿色
((90, 100, 100), (120, 255, 255)), # 蓝色
]
shape_template = cv2.imread("shape_template.png", cv2.IMREAD_GRAYSCALE)
# 读取图片并转换为HSV色彩空间
image = cv2.imread("image.jpg")
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 遍历每种颜色范围,找出符合条件的像素
for color_range in color_ranges:
mask = cv2.inRange(hsv, color_range[0], color_range[1])
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历每个轮廓,找出符合形状模板的对象
for contour in contours:
area = cv2.contourArea(contour)
if area < 100: # 忽略面积较小的轮廓
continue
x, y, w, h = cv2.boundingRect(contour)
roi = hsv[y:y+h, x:x+w]
shape_result = cv2.matchTemplate(roi, shape_template, cv2.TM_CCOEFF_NORMED)
if np.max(shape_result) > 0.8: # 如果匹配结果大于阈值,则认为是符合形状模板的对象
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow("result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,颜色范围可以根据需要自行调整,形状模板可以通过绘制图形并保存为灰度图像来生成。在实际应用中,可能需要对算法进行进一步的优化和调整,以达到更好的效果。
阅读全文