简体   繁体   English

使用OpenCV进行图像检测

[英]Image Detection using OpenCV

Suppose I want to detect if jam jar is there in an image or not. 假设我要检测图像中是否存在果酱瓶。 Eg in the following table, I've a jam jar on a table among other things. 例如在下表中,我在桌上有一个果酱罐。 The code will detect the image have jam jar. 该代码将检测到图像卡纸。 If there's no jam jar in the image, the code will highlight that, there's not images. 如果图像中没有果酱瓶,则代码将突出显示该图像,即没有图像。

I want to create a code using openCV in python to detect the image. 我想在python中使用openCV创建代码以检测图像。

I came across that "Template Matching" is a way to do it. 我发现“模板匹配”是一种实现方法。 The code I'm using are the following: 我正在使用的代码如下:

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

There are 2 issues with this approach: 这种方法有两个问题:

1) It doesn't detect actual object properly. 1)无法正确检测到实际物体。 2) I want the code to tell me which are the image that are not matching. 2)我想让代码告诉我哪些是不匹配的图像。

Please find the images I used below. 请在下面找到我使用的图像。

Can anyone please help? 谁能帮忙吗? Any coding example reference will do. 任何编码示例参考都可以。

Thank you! 谢谢!

在此处输入图片说明

在此处输入图片说明

也许您可以尝试使用Google Vision API来确定问题的一部分: https : //cloud.google.com/vision/

Use machine learning for detecting jam jars in the image. 使用机器学习来检测图像中的果酱罐。 First train your system using positive and negative training examples and then use that trained model to predict whether image contain jam jars or not. 首先使用正面和负面的训练示例训练您的系统,然后使用该训练的模型来预测图像是否包含果酱罐。

You can use CNNs, SVM for that purpose. 您可以为此使用CNN,SVM。 see links: 查看链接:
http://www.pyimagesearch.com/2015/11/09/pedestrian-detection-opencv/ http://www.pyimagesearch.com/2015/11/09/pedestrian-detection-opencv/
HOG training and detection in Python using OpenCV 使用OpenCV在Python中进行HOG训练和检测
http://docs.opencv.org/2.4/modules/gpu/doc/object_detection.html http://docs.opencv.org/2.4/modules/gpu/doc/object_detection.html

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

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