From 90f525b9096053912a828750793559c427de1408 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Tue, 20 Sep 2016 17:43:47 +0000 Subject: [PATCH] - fixed runtime errors if no objects are present git-svn-id: http://moon:8086/svn/software/trunk/projects/opencv@321 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- beadDetect.py | 90 +++++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/beadDetect.py b/beadDetect.py index 3882316..8af9c3c 100755 --- a/beadDetect.py +++ b/beadDetect.py @@ -62,7 +62,7 @@ class FindObjects(): temp_objects = [] objectsCandIds = [] - if hierachy.any(): + if hierachy is not None: while count != -1: family = FindObjects.getFamily([], count, hierachy) @@ -294,51 +294,55 @@ if videoFile == "piCamera": print("[INFO] Camera : elasped time: {:.2f}".format(vs.getfps().elapsed())) print("[INFO] Camera: approx. FPS: {:.2f}".format(vs.getfps().fps())) -# Output stats -findObjects.printStats() +if numColorClasses: + + # Output stats + findObjects.printStats() -# Analyze colors -numObjects = len(beadColors); -blue = np.zeros(numObjects) -green = np.zeros(numObjects) -red = np.zeros(numObjects) -plotColors = np.zeros((numObjects,3)) -i = 0 -for color in beadColors: - blue[i] = color[0] - green[i] = color[1] - red[i] = color[2] - plotColors[i] = [red[i], green[i], blue[i]] - i += 1 - -# Kmeans create color classes -Z = np.float32(plotColors) - -# Define criteria = ( type, max_iter, epsilon ) -criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.1) -ret,label,center=cv2.kmeans(Z,numColorClasses,None,criteria,10,cv2.KMEANS_PP_CENTERS) - -print (center) - -cnt1 = 0 -for c1 in center: - cnt2 = 0 - for c2 in center: - print ("Color distance["+ str(cnt1) + "," + str(cnt2) + "] = " + str(colordistance(c1, c2))) - cnt2 += 1 - cnt1 += 1 + # Analyze colors + numObjects = len(beadColors); + blue = np.zeros(numObjects) + green = np.zeros(numObjects) + red = np.zeros(numObjects) + plotColors = np.zeros((numObjects,3)) + i = 0 + for color in beadColors: + blue[i] = color[0] + green[i] = color[1] + red[i] = color[2] + plotColors[i] = [red[i], green[i], blue[i]] + i += 1 + + # Kmeans create color classes + Z = np.float32(plotColors) + + # Define criteria = ( type, max_iter, epsilon ) + criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.1) + ret,label,center=cv2.kmeans(np.float32(plotColors), numColorClasses, None, criteria, 10, cv2.KMEANS_PP_CENTERS) + + print (center) + + cnt1 = 0 + for c1 in center: + cnt2 = 0 + for c2 in center: + print ("Color distance["+ str(cnt1) + "," + str(cnt2) + "] = " + str(colordistance(c1, c2))) + cnt2 += 1 + cnt1 += 1 -# Scatter plot of colors -fig = plt.figure() -ax = fig.add_subplot(111, projection='3d') -ax.set_xlabel('blue') -ax.set_ylabel('green') -ax.set_zlabel('red') -ax.scatter(blue, green, red, zdir='z', s=10, c=(0,0,0), lw = 0, depthshade=True) -ax.scatter(center[:,2], center[:,1], center[:,0], zdir='z', s=500, facecolors=center, lw = 1, depthshade=True) - -plt.show() + # Scatter plot of colors + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + ax.set_xlabel('blue') + ax.set_ylabel('green') + ax.set_zlabel('red') + ax.scatter(blue, green, red, zdir='z', s=10, c=(0,0,0), lw = 0, depthshade=True) + ax.scatter(center[:,2], center[:,1], center[:,0], zdir='z', s=500, facecolors=center, lw = 1, depthshade=True) + + plt.show() +else: + print("Sorry, no colors have been detected") # do a bit of cleanup cv2.destroyAllWindows()