summaryrefslogtreecommitdiff
path: root/proc.py
diff options
context:
space:
mode:
Diffstat (limited to 'proc.py')
-rw-r--r--proc.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/proc.py b/proc.py
new file mode 100644
index 0000000..7bdef13
--- /dev/null
+++ b/proc.py
@@ -0,0 +1,68 @@
+#!/bin/python
+#python 3.6.0
+import numpy
+import cv2
+import math
+import sys
+def thresh (img, minv, maxv) :
+ ret, thresh = cv2.threshold(img, minv, 255, cv2.THRESH_BINARY)
+ ret, ithresh = cv2.threshold(img, maxv, 255, cv2.THRESH_BINARY_INV)
+ return cv2.bitwise_and(thresh,ithresh)
+img = cv2.imread(sys.argv[1])
+#blur, kernel is the distance of pixels the rurrounding ones are
+#29 seems to be upper lmit on effectiveness.
+himg = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
+h,s,v = cv2.split(himg)
+# i think the range for red is 0 10, 170 179
+#blue is 195-135, 40? really that much?
+#hue only testing, not very effective.
+# better with saturation
+thresh = cv2.bitwise_and(cv2.bitwise_or(thresh(h,0,10),thresh(h,169,180)), thresh(s,60,255))
+#thresh = cv2.bitwise_and(thresh(h,95,135), thresh(s,60,255))
+#thresh = cv2.GaussianBlur(thresh,(29,29),0,0,cv2.BORDER_REFLECT_101)
+cv2.imwrite("stallmask.jpg",thresh);
+mask = cv2.merge((thresh,thresh,thresh))
+masked = cv2.bitwise_and(himg, mask);
+cv2.imwrite("stallmasked.jpg",cv2.cvtColor(masked,cv2.COLOR_HSV2BGR));
+#only takes 1 cannel arrays?
+im2, con, heir = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
+v = 0
+for i in range(0, len(con)) :
+ if (cv2.contourArea(con[i]) > 2000) :
+ a = cv2.contourArea(con[i])
+ cv2.drawContours(masked, con, i, (120,255,255), 5)
+ (cx, cy), r = cv2.minEnclosingCircle(con[i])
+ p = 1- ( a / (math.pi * math.pow(r, 2)))
+ c = (int(cx),int(cy))
+ cv2.circle(masked, c,int(r), (150,255,255), 5)
+ if (p < .35) :
+ print("yee")
+ #find find frst child
+ #her in list mode returns the array inside of another array
+ if ( heir[0][i][2] != -1 ):
+ j = heir[0][i][2]
+ while (j != -1) :
+ cv2.drawContours(masked, con, j, (160,255,255), 3)
+ cp = 0
+ cp = cp + cv2.contourArea(con[j])
+ j = heir[0][j][0]
+ cp = cp/a
+ else :
+ cp = 0
+ print ("child area perc")
+ print(cp)
+ if (cp > 0.0005) :
+ cv2.putText(masked, "p", c, cv2.FONT_HERSHEY_PLAIN, 10, (0,255,255),cv2.LINE_AA)
+ else :
+ cv2.putText(masked, 'c', c, cv2.FONT_HERSHEY_PLAIN, 10, (0,255,255),cv2.LINE_AA)
+
+ print(p)
+
+ v = v + 1
+ else :
+ cv2.drawContours(masked, con, i, (80,255,255), 1)
+cv2.imwrite("stallmaskedcon.jpg",cv2.cvtColor(masked,cv2.COLOR_HSV2BGR))
+print("properly sized contours")
+print(v)
+print("all contours")
+print(len(con))