【问题标题】:OpenCV find coloured in circle and position value PythonOpenCV找到彩色圆圈和位置值Python
【发布时间】:2023-04-03 18:39:01
【问题描述】:

我要做的是处理下面的考勤表,告诉我谁在场,谁不在

我目前正在使用 matchTemplate,它使用一个奇异的黑点来查找所有填充的点(图像首先转换为灰度)。下图

然后我操纵 matchPattern 数组并在 y 方向上大致获得每个数组的中心,我可以看到与失踪学生相对应的差距在哪里。

我遇到的问题是,确定这种方法可以完美输入,但我的目标是能够拍摄一张纸的照片并进行处理?
注意:考勤表是我制作的,因此可以根据需要进行更改/修改。

我附上了一个示例图片以匹配如下所示。

使用我目前的方法只是一场灾难(见下文)。现在我不确定从哪里开始我尝试修改阈值但超过 0.65 它无法找到任何图像。

import cv2
import numpy as np
from matplotlib import pyplot as plt

values = []
img_rgb = cv2.imread('/home/user/Downloads/input.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('/home/user/Downloads/input_2.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.6
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
  cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
  values.append(pt[1]+h/2)

cv2.imwrite('output.png',img_rgb)
values.sort()
pivot = values[0]
count = 1
total = values[0]
cleaned = []

for x in range(1,len(values)):
  if(values[x] < pivot+20):
    pivot = values[x]
    count = count + 1
    total = total + values[x]
  else:
    print values[x]
    cleaned.append(int(total/count))
    pivot = values[x]
    count = 1
    total = values[x]

  if x == len(values)-1:
    cleaned.append(int(total/count))
print values
print cleaned

这是另一个测试图像:

【问题讨论】:

    标签:
    python
    algorithm
    opencv
    image-processing
    numpy