-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathguiutils.py
126 lines (89 loc) · 4.57 KB
/
guiutils.py
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import cv2
class SmoothImage:
def __init__(self, image, average_filter_size=1, gaussian_filter_size=1, median_filter_size=1, bilateral_filter_size=1):
self.image = image
self._average_filter_size = average_filter_size
self._gaussian_filter_size = gaussian_filter_size
self._median_filter_size = median_filter_size
self._bilateral_filter_size = bilateral_filter_size
def onchangeAvgFltrSz(pos):
self._average_filter_size = pos
self._average_filter_size += (self._average_filter_size + 1) % 2 # make sure the filter size is odd
self._render()
def onchangeGaussFltrSz(pos):
self._gaussian_filter_size = pos
self._gaussian_filter_size += (self._gaussian_filter_size + 1) % 2 # make sure the filter size is odd
self._render()
def onchangeMdnFltrSz(pos):
self._median_filter_size = pos
self._median_filter_size += (self._median_filter_size + 1) % 2 # make sure the filter size is odd
self._render()
def onchangeBltrlFltrSz(pos):
self._bilateral_filter_size = pos
self._bilateral_filter_size += (self._bilateral_filter_size + 1) % 2 # make sure the filter size is odd
self._render()
cv2.namedWindow('blurred')
cv2.createTrackbar('average_filter_size', 'blurred', self._average_filter_size, 20, onchangeAvgFltrSz)
cv2.createTrackbar('gaussian_filter_size', 'blurred', self._gaussian_filter_size, 20, onchangeGaussFltrSz)
cv2.createTrackbar('median_filter_size', 'blurred', self._median_filter_size, 20, onchangeMdnFltrSz)
cv2.createTrackbar('bilateral_filter_size', 'blurred', self._bilateral_filter_size, 20, onchangeBltrlFltrSz)
self._render()
print "Adjust the parameters as desired. Hit any key to close."
cv2.waitKey(0)
cv2.destroyWindow('blurred')
def blurred_image(self):
return self._blurred_image
def averageFilterSize(self):
return self._average_filter_size
def gaussianFilterSize(self):
return self._gaussian_filter_size
def medianFilterSize(self):
return self._median_filter_size
def bilateralFilterSize(self):
return self._bilateral_filter_size
def _render(self):
self._blurred_image = cv2.blur(self.image, (self._average_filter_size, self._average_filter_size))
self._blurred_image = cv2.GaussianBlur(self._blurred_image, (self._gaussian_filter_size, self._gaussian_filter_size), 0)
self._blurred_image = cv2.medianBlur(self._blurred_image, self._median_filter_size)
self._blurred_image = cv2.bilateralFilter(self._blurred_image, 5, self._bilateral_filter_size, self._median_filter_size)
cv2.imshow('blurred', self._blurred_image)
class EdgeFinder:
def __init__(self, image, filter_size=1, threshold1=0, threshold2=0):
self.image = image
self._filter_size = filter_size
self._threshold1 = threshold1
self._threshold2 = threshold2
def onchangeThreshold1(pos):
self._threshold1 = pos
self._render()
def onchangeThreshold2(pos):
self._threshold2 = pos
self._render()
def onchangeFilterSize(pos):
self._filter_size = pos
self._filter_size += (self._filter_size + 1) % 2 # make sure the filter size is odd
self._render()
cv2.namedWindow('edges')
cv2.createTrackbar('threshold1', 'edges', self._threshold1, 255, onchangeThreshold1)
cv2.createTrackbar('threshold2', 'edges', self._threshold2, 255, onchangeThreshold2)
cv2.createTrackbar('filter_size', 'edges', self._filter_size, 20, onchangeFilterSize)
self._render()
print "Adjust the parameters as desired. Hit any key to close."
cv2.waitKey(0)
cv2.destroyWindow('edges')
cv2.destroyWindow('smoothed')
def threshold1(self):
return self._threshold1
def threshold2(self):
return self._threshold2
def filterSize(self):
return self._filter_size
def edgeImage(self):
return self._edge_img
def smoothedImage(self):
return self._smoothed_img
def _render(self):
self._smoothed_img = cv2.GaussianBlur(self.image, (self._filter_size, self._filter_size), sigmaX=0, sigmaY=0)
self._edge_img = cv2.Canny(self._smoothed_img, self._threshold1, self._threshold2)
cv2.imshow('smoothed', self._smoothed_img)
cv2.imshow('edges', self._edge_img)