OLD | NEW |
---|---|
(Empty) | |
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
2 # Use of this source code is governed by a BSD-style license that can be | |
3 # found in the LICENSE file. | |
4 | |
5 from google3.pyglib import flags | |
craigdh
2013/06/13 19:28:31
Chrome is open source. You can't use google3. Inst
| |
6 from google3.testing.pybase import googletest | |
7 from PIL import Image | |
8 import image_tools | |
9 | |
10 | |
11 class ImageToolsTest(googletest.TestCase): | |
12 | |
13 def testAreTheSameSize(self): | |
14 black25x25 = self._GenImage((25, 25), (0, 0, 0)) | |
15 white25x25 = self._GenImage((25, 25), (255, 255, 255)) | |
16 black50x50 = self._GenImage((50, 50), (0, 0, 0)) | |
17 white50x50 = self._GenImage((50, 50), (255, 255, 255)) | |
18 | |
19 self.assertTrue(image_tools.AreTheSameSize(black25x25, black25x25)) | |
20 self.assertTrue(image_tools.AreTheSameSize(white25x25, white25x25)) | |
21 self.assertTrue(image_tools.AreTheSameSize(black50x50, black50x50)) | |
22 self.assertTrue(image_tools.AreTheSameSize(white50x50, white50x50)) | |
23 self.assertTrue(image_tools.AreTheSameSize(black25x25, white25x25)) | |
24 self.assertTrue(image_tools.AreTheSameSize(black50x50, white50x50)) | |
25 | |
26 self.assertFalse(image_tools.AreTheSameSize(black50x50, black25x25)) | |
27 self.assertFalse(image_tools.AreTheSameSize(white50x50, white25x25)) | |
28 self.assertFalse(image_tools.AreTheSameSize(black25x25, white50x50)) | |
29 self.assertFalse(image_tools.AreTheSameSize(black50x50, white25x25)) | |
30 | |
31 self.assertRaises(image_tools.Error, image_tools.AreTheSameSize) | |
32 self.assertRaises(image_tools.Error, image_tools.AreTheSameSize, black50x50) | |
33 | |
34 def testGetColorDist(self): | |
35 px1 = (0, 0, 0) | |
36 px2 = (255, 255, 255) | |
37 px3 = (0, 255, 255) | |
38 px4 = (0, 0, 255) | |
39 | |
40 self.assertAlmostEquals(image_tools.GetColorDist(px1, px1), 0., places=4) | |
41 self.assertAlmostEquals(image_tools.GetColorDist(px1, px2), 1., places=4) | |
42 self.assertAlmostEquals(image_tools.GetColorDist(px2, px2), 0., places=4) | |
43 self.assertAlmostEquals(image_tools.GetColorDist(px1, px3), 2./3, places=4) | |
44 self.assertAlmostEquals(image_tools.GetColorDist(px1, px4), 1./3, places=4) | |
45 self.assertAlmostEquals(image_tools.GetColorDist(px3, px4), 1./3, places=4) | |
46 | |
47 def testGetColorDistAsColor(self): | |
48 px1 = (0, 0, 0) | |
49 px2 = (255, 255, 255) | |
50 | |
51 self.assertEquals(image_tools.GetColorDistAsColor(px1, px2), | |
52 (255, 255, 255)) | |
53 self.assertEquals(image_tools.GetColorDistAsColor(px1, px1), | |
54 (0, 0, 0)) | |
55 self.assertEquals(image_tools.GetColorDistAsColor(px2, px2), | |
56 (0, 0, 0)) | |
57 | |
58 def testBrightness(self): | |
59 px1 = (0, 0, 0) | |
60 px2 = (255, 255, 255) | |
61 px3 = (1, 2, 3) | |
62 | |
63 self.assertEquals(image_tools.Brightness(px1), 0) | |
64 self.assertEquals(image_tools.Brightness(px2), 255*3) | |
65 self.assertEquals(image_tools.Brightness(px3), 6) | |
66 | |
67 def testMinPixel(self): | |
68 px1 = (0, 0, 0) | |
69 px2 = (255, 255, 255) | |
70 px3 = (1, 2, 3) | |
71 | |
72 self.assertEquals(image_tools.MinPixel(px1, px2), px1) | |
73 self.assertEquals(image_tools.MinPixel(px1, px3), px1) | |
74 self.assertEquals(image_tools.MinPixel(px2, px3), px3) | |
75 self.assertEquals(image_tools.MinPixel(px1, px1), px1) | |
76 | |
77 def testMaxPixel(self): | |
78 px1 = (0, 0, 0) | |
79 px2 = (255, 255, 255) | |
80 px3 = (1, 2, 3) | |
81 | |
82 self.assertEquals(image_tools.MaxPixel(px1, px2), px2) | |
83 self.assertEquals(image_tools.MaxPixel(px1, px3), px3) | |
84 self.assertEquals(image_tools.MaxPixel(px2, px3), px2) | |
85 self.assertEquals(image_tools.MaxPixel(px1, px1), px1) | |
86 | |
87 def testCreateMask(self): | |
88 black25x25 = self._GenImage((25, 25), (0, 0, 0)) | |
89 black50x50 = self._GenImage((50, 50), (0, 0, 0)) | |
90 white25x25 = self._GenImage((25, 25), (255, 255, 255)) | |
91 gray25x25 = self._GenImage((25, 25), (127, 127, 127)) | |
92 | |
93 m1 = image_tools.CreateMask(True, 1, black25x25, white25x25) | |
94 self.assertTrue(self._AllPixelsOfColor(m1, (255, 255, 255))) | |
95 m2 = image_tools.CreateMask(True, 1, black25x25, black25x25) | |
96 self.assertTrue(self._AllPixelsOfColor(m2, (0, 0, 0))) | |
97 m3 = image_tools.CreateMask(True, 1, white25x25, white25x25) | |
98 self.assertTrue(self._AllPixelsOfColor(m3, (0, 0, 0))) | |
99 | |
100 m4 = image_tools.CreateMask(False, 0, white25x25, gray25x25) | |
101 self.assertFalse(self._AllPixelsOfColor(m4, (0, 0, 0)) or | |
102 self._AllPixelsOfColor(m4, (255, 255, 255))) | |
103 | |
104 m5 = image_tools.CreateMask(True, -1, white25x25, white25x25) | |
105 self.assertTrue(self._AllPixelsOfColor(m5, (255, 255, 255))) | |
106 m6 = image_tools.CreateMask(True, -1, white25x25, black25x25) | |
107 self.assertTrue(self._AllPixelsOfColor(m6, (255, 255, 255))) | |
108 | |
109 self.assertRaises(image_tools.Error, image_tools.CreateMask, | |
110 True, 1, white25x25, black50x50) | |
111 | |
112 def testComputeLargestDifference(self): | |
113 white25x25 = self._GenImage((25, 25), (255, 255, 255)) | |
114 black25x25 = self._GenImage((25, 25), (0, 0, 0)) | |
115 wd = list(white25x25.getdata()) | |
116 bd = list(black25x25.getdata()) | |
117 | |
118 self.assertEquals(image_tools.ComputeLargestDifference(wd, bd, bd), wd) | |
119 self.assertEquals(image_tools.ComputeLargestDifference(bd, wd, bd), wd) | |
120 self.assertEquals(image_tools.ComputeLargestDifference(wd, wd, wd), wd) | |
121 self.assertEquals(image_tools.ComputeLargestDifference(bd, bd, bd), bd) | |
122 self.assertEquals(image_tools.ComputeLargestDifference(bd, wd, wd), bd) | |
123 | |
124 def testThresholdColorDiff(self): | |
125 p1 = ((0, 0, 0), (1, 2, 3)) | |
126 p2 = ((0, 0, 0), (0, 0, 0)) | |
127 | |
128 self.assertEquals(image_tools.ThresholdColorDiff(p1[0], p1[1], 0), 1.) | |
129 self.assertEquals(image_tools.ThresholdColorDiff(p2[0], p2[1], 0), 0.) | |
130 self.assertEquals(image_tools.ThresholdColorDiff(p1[0], p1[1], | |
131 14./(3*255**2)), 0.) | |
132 self.assertEquals(image_tools.ThresholdColorDiff(p1[0], p1[1], | |
133 13./(3*255**2)), 1.) | |
134 | |
135 def testMaskToValue(self): | |
136 px1 = (0, 0, 0) | |
137 px2 = (255, 255, 255) | |
138 px3 = (100, 100, 100) | |
139 | |
140 self.assertEquals(image_tools.MaskToValue(px1), 1.) | |
141 self.assertEquals(image_tools.MaskToValue(px2), 0.) | |
142 self.assertRaises(image_tools.Error, image_tools.MaskToValue, px3) | |
143 | |
144 def testSimilarity(self): | |
145 white25x25 = self._GenImage((25, 25), (255, 255, 255)) | |
146 white50x50 = self._GenImage((50, 50), (255, 255, 255)) | |
147 black25x25 = self._GenImage((25, 25), (0, 0, 0)) | |
148 | |
149 self.assertEquals(image_tools.Similarity(white25x25, white25x25), 1.) | |
150 self.assertEquals(image_tools.Similarity(black25x25, black25x25), 1.) | |
151 self.assertEquals(image_tools.Similarity(white25x25, black25x25), 0.) | |
152 self.assertEquals(image_tools.Similarity(white25x25, | |
153 black25x25, | |
154 mask=white25x25), | |
155 1.) | |
156 self.assertEquals(image_tools.Similarity(white25x25, | |
157 white25x25, | |
158 mask=white25x25), | |
159 1.) | |
160 self.assertEquals(image_tools.Similarity(white25x25, | |
161 black25x25, | |
162 mask=black25x25), | |
163 0.) | |
164 self.assertEquals(image_tools.Similarity(white25x25, | |
165 white25x25, | |
166 mask=black25x25), | |
167 1.) | |
168 self.assertRaises(image_tools.Error, image_tools.Similarity, | |
169 white25x25, white50x50) | |
170 self.assertRaises(image_tools.Error, image_tools.Similarity, | |
171 white25x25, white25x25, mask=white50x50) | |
172 | |
173 def testSameImage(self): | |
174 white25x25 = self._GenImage((25, 25), (255, 255, 255)) | |
175 black25x25 = self._GenImage((25, 25), (0, 0, 0)) | |
176 white50x50 = self._GenImage((50, 50), (255, 255, 255)) | |
177 | |
178 self.assertTrue(image_tools.SameImage(white25x25, white25x25, 0.97)) | |
179 self.assertTrue(image_tools.SameImage(white25x25, black25x25, 0.)) | |
180 self.assertFalse(image_tools.SameImage(black25x25, black25x25, 1.01)) | |
181 | |
182 self.assertTrue(image_tools.SameImage(white25x25, black25x25, | |
183 0., mask=white25x25)) | |
184 self.assertTrue(image_tools.SameImage(white25x25, white25x25, | |
185 1., mask=white25x25)) | |
186 self.assertFalse(image_tools.SameImage(white25x25, white25x25, | |
187 1.01, mask=white25x25)) | |
188 | |
189 self.assertRaises(image_tools.Error, image_tools.SameImage, | |
190 white25x25, white50x50, 1.) | |
191 self.assertRaises(image_tools.Error, image_tools.SameImage, | |
192 white25x25, white25x25, 1., mask=white50x50) | |
193 | |
194 def _GenImage(self, size, color): | |
craigdh
2013/06/13 19:28:31
This can be a module level function.
| |
195 return Image.new('RGB', size, color) | |
196 | |
197 def _AllPixelsOfColor(self, image, color): | |
craigdh
2013/06/13 19:28:31
ditto
| |
198 data = image.getdata() | |
199 for i in data: | |
craigdh
2013/06/13 19:28:31
Just use any()
| |
200 if i == color: | |
201 continue | |
202 else: | |
203 return False | |
204 return True | |
205 | |
206 if __name__ == '__main__': | |
207 googletest.main() | |
208 | |
209 | |
OLD | NEW |