简体   繁体   中英

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.

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. 2) I want the code to tell me which are the image that are not matching.

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. see links:
http://www.pyimagesearch.com/2015/11/09/pedestrian-detection-opencv/
HOG training and detection in Python using OpenCV
http://docs.opencv.org/2.4/modules/gpu/doc/object_detection.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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