使用 Open CV 在图像中查找模板/对象 Python

Find template / object in image using Open CV Python

我正在从事与医学测试相关的项目,其中我需要确定测试是阳性、阴性还是无效。 下面是我的项目需求示例

  1. 输入图片

  1. 检查下图所示的测试结果

我尝试过使用 OpenCV 的模板检测示例,但它不准确。

下面是我试过的代码

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('s4.jpg', 0)
img2 = img.copy()
template = cv.imread('sub-2.jpeg', 0)
w, h = template.shape[::-1]
# All the 6 methods for comparison in a list
methods = ['cv.TM_CCOEFF', 'cv.TM_CCOEFF_NORMED', 'cv.TM_CCORR',
           'cv.TM_CCORR_NORMED', 'cv.TM_SQDIFF', 'cv.TM_SQDIFF_NORMED']
for meth in methods:
    img = img2.copy()
    method = eval(meth)
    # Apply template Matching
    res = cv.matchTemplate(img, template, method)
    min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
    # If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum
    if method in [cv.TM_SQDIFF, cv.TM_SQDIFF_NORMED]:
        top_left = min_loc
    else:
        top_left = max_loc

    bottom_right = (top_left[0] + w, top_left[1] + h)
    cv.rectangle(img, top_left, bottom_right, 255, 2)
    plt.subplot(121), plt.imshow(res, cmap='gray')
    plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(img, cmap='gray')
    plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
    plt.suptitle(meth)
    plt.show()

感谢大家的建议,我可以使用边缘检测来解决这个问题,找出测试结果框,然后检测到没有水平线来得到结果。