I am trying to use cv2.matchShapes where I am using dataset of images so when I compare their contours, then store all ret values in an float array and images in another one, so the final result that I want is sorted array of images depending on their ret values.
Tried if rets[i] < rets[i+1] but got an error TypeError: list indices must be integers or slices, not float, Googled about float comparison but didn't solve my problem.
import argparse
import pickle
import glob
import sys
from PIL import Image
import os
import cv2
import numpy as np
dataset = "dataset/*.jpg"
# print('image_array shape:', np.array(imageArray).shape)
# cv2.imshow('frame', imageArray[1])
# cv2.waitKey(0)
queryImage = cv2.imread("query/12034.jpg", 0)
ret, thresh = cv2.threshold(queryImage, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
queryContour = contours[0]
min_dist = sys.maxsize
images = []
rets = []
for imagePath in glob.glob(dataset):
image = cv2.imread(imagePath, 0)
ret, th2 = cv2.threshold(image, 127, 255, 0)
contours, hierarchy = cv2.findContours(th2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
ret = cv2.matchShapes(queryContour, cnt, 1, 0.0)
images.append(image)
rets.append(ret)
# if ret < min_dist:
# min_dist = ret
# images.append(image)
print(ret)
for i in rets:
if abs(rets[i] - rets[i+1]):
tmp = images[i]
images[i] = images[i+1]
images[i+1] = tmp
retTmp = rets[i]
rets[i] = rets[i+1]
rets[i+1] = retTmp
print(rets)
for i in retsgoes over actual values contained in rets, not indexes of those values.