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