1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/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
#red
#thresh = cv2.bitwise_and(cv2.bitwise_or(thresh(h,0,10),thresh(h,169,180)), thresh(s,60,255))
#blue
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)
#number of contours above certain size
vc = 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")
conmask = numpy.zeros(v.shape, numpy.uint8)
cv2.drawContours(conmask, con, i, (255), cv2.FILLED)
conmasked = cv2.bitwise_and(v, conmask)
meanconmasked = conmasked.sum().sum() / a
print(meanconmasked)
ret, conmasked = cv2.threshold(conmasked, meanconmasked, 255, cv2.THRESH_BINARY_INV)
cv2.imwrite("conmasked" + str(i) + ".jpg",cv2.merge((conmasked,conmasked,conmasked)))
im2, rcon, rheir = cv2.findContours(conmasked, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(masked, rcon, -1, (50, 255, 255),2)
print(p)
vc = vc + 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(vc)
print("all contours")
print(len(con))
|