Ask Your Question

ElizavetaElagina's profile - activity

2016-12-14 15:50:28 -0600 received badge  Taxonomist
2015-03-11 10:11:16 -0600 asked a question What images are recognized best with template matching

Hello! My problem is this: I have a set of kids' cubes and I need a programme that will be able to recognize them on an image. (find coordinates of each cube) Here is the code I'm using:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('pictures/newnao.jpg',0)
img2 = img.copy()
template = cv2.imread('pictures/blue.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, 100, 20)

    plt.subplot(121),plt.imshow(res,cmap = 'gray')
    plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
    plt.subplot(122),plt.imshow(img)
    plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
    plt.suptitle(meth)

    plt.show()

To make the cubes different from each other I can stick some images on them. So, what I want to know is what kind of pictures I should use to make it more efficient. The camera I'm using is the one built in the head of the robot NAO. The quality of pictures is not very good. newnao1.jpg