我有一张含有四个上下相连的方框,每个方框里面填了一种颜色的样本图,现在我需要在另外一张图片中识别那张图片是否包含了样本图,如果包含了样本图,我需要提取出其中的颜色信息。Python脚本
时间: 2024-03-17 20:45:24 浏览: 14
可以使用OpenCV来实现这个任务。首先,你需要将样本图分别读入到四个numpy数组中。然后,你可以使用OpenCV中的模板匹配函数`cv2.matchTemplate()`来在待识别图片中搜索样本图。如果匹配成功,你可以使用OpenCV中的颜色提取函数`cv2.inRange()`来提取颜色信息。以下是Python代码示例:
```python
import cv2
import numpy as np
# 读取样本图
sample1 = cv2.imread('sample1.jpg')
sample2 = cv2.imread('sample2.jpg')
sample3 = cv2.imread('sample3.jpg')
sample4 = cv2.imread('sample4.jpg')
# 待识别图片
img = cv2.imread('img.jpg')
# 模板匹配
res1 = cv2.matchTemplate(img, sample1, cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(img, sample2, cv2.TM_CCOEFF_NORMED)
res3 = cv2.matchTemplate(img, sample3, cv2.TM_CCOEFF_NORMED)
res4 = cv2.matchTemplate(img, sample4, cv2.TM_CCOEFF_NORMED)
# 设置匹配阈值
threshold = 0.8
# 检查是否匹配成功
loc1 = np.where(res1 >= threshold)
loc2 = np.where(res2 >= threshold)
loc3 = np.where(res3 >= threshold)
loc4 = np.where(res4 >= threshold)
# 如果匹配成功,提取颜色信息
if len(loc1[0]) > 0:
mask = cv2.inRange(img[loc1[0][0]:loc1[0][0]+sample1.shape[0], loc1[1][0]:loc1[1][0]+sample1.shape[1]], (0, 0, 0), (255, 255, 255))
color = cv2.mean(img[loc1[0][0]:loc1[0][0]+sample1.shape[0], loc1[1][0]:loc1[1][0]+sample1.shape[1]], mask=mask)
print("Color of sample 1: ", color)
if len(loc2[0]) > 0:
mask = cv2.inRange(img[loc2[0][0]:loc2[0][0]+sample2.shape[0], loc2[1][0]:loc2[1][0]+sample2.shape[1]], (0, 0, 0), (255, 255, 255))
color = cv2.mean(img[loc2[0][0]:loc2[0][0]+sample2.shape[0], loc2[1][0]:loc2[1][0]+sample2.shape[1]], mask=mask)
print("Color of sample 2: ", color)
if len(loc3[0]) > 0:
mask = cv2.inRange(img[loc3[0][0]:loc3[0][0]+sample3.shape[0], loc3[1][0]:loc3[1][0]+sample3.shape[1]], (0, 0, 0), (255, 255, 255))
color = cv2.mean(img[loc3[0][0]:loc3[0][0]+sample3.shape[0], loc3[1][0]:loc3[1][0]+sample3.shape[1]], mask=mask)
print("Color of sample 3: ", color)
if len(loc4[0]) > 0:
mask = cv2.inRange(img[loc4[0][0]:loc4[0][0]+sample4.shape[0], loc4[1][0]:loc4[1][0]+sample4.shape[1]], (0, 0, 0), (255, 255, 255))
color = cv2.mean(img[loc4[0][0]:loc4[0][0]+sample4.shape[0], loc4[1][0]:loc4[1][0]+sample4.shape[1]], mask=mask)
print("Color of sample 4: ", color)
```
在这个示例中,我们使用了模板匹配函数`cv2.matchTemplate()`来搜索样本图,并使用阈值0.8来判断是否匹配成功。如果匹配成功,我们使用颜色提取函数`cv2.inRange()`来提取颜色信息,并使用函数`cv2.mean()`计算颜色的平均值。