diff options
Diffstat (limited to 'proc.py')
-rw-r--r-- | proc.py | 68 |
1 files changed, 68 insertions, 0 deletions
@@ -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)) |