0

Suppose I want to detect if jam jar is there in an image or not. E.g. 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!

enter image description here

enter image description here

3
  • I've updated the question. Commented Jun 1, 2017 at 15:47
  • Hi, Can anyone explain why my question is still on hold. I guess it's a clearly defined problem. Commented Jun 1, 2017 at 16:36
  • I have deleted my answer, it may make others more willing to answer you. Good luck. Commented Jun 5, 2017 at 10:30

2 Answers 2

1

Maybe you can try Google Vision API for the identifying part of your problem: https://cloud.google.com/vision/

Sign up to request clarification or add additional context in comments.

1 Comment

This options look interesting. I'll look into it.
0

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

1 Comment

Thanks for your comment! I'll look into your suggestions.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.