简体   繁体   English

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

[英]Find template / object in image using Open CV Python

I'm working on project related to medical tests, in which I need to find out if test is positive, negative or invalid.我正在从事与医学测试相关的项目,在该项目中我需要确定测试是阳性、阴性还是无效。 below is example of my project needs下面是我的项目需求的例子

  1. input image输入图像

在此处输入图片说明

  1. check for test result like in below image检查测试结果如下图

在此处输入图片说明

I have tried template detection example using OpenCV but its not accurate.我尝试过使用 OpenCV 的模板检测示例,但它不准确。

below is code which i tried下面是我试过的代码

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()

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM