17 class OpenCVTests(unittest.TestCase):
19 depths = [ cv.IPL_DEPTH_8U, cv.IPL_DEPTH_8S, cv.IPL_DEPTH_16U, cv.IPL_DEPTH_16S, cv.IPL_DEPTH_32S, cv.IPL_DEPTH_32F, cv.IPL_DEPTH_64F ]
61 def depthsize(self, d):
62 return { cv.IPL_DEPTH_8U : 1,
68 cv.IPL_DEPTH_64F : 8 }[d]
70 def get_sample(self, filename, iscolor = cv.CV_LOAD_IMAGE_COLOR):
71 if not filename in self.image_cache:
72 filedata = urllib.urlopen("https://code.ros.org/svn/opencv/trunk/opencv/" + filename).read()
73 imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1)
74 cv.SetData(imagefiledata, filedata, len(filedata))
75 self.image_cache[filename] = cv.DecodeImageM(imagefiledata, iscolor)
76 return self.image_cache[filename]
85 for i,img in enumerate(L):
86 cv.NamedWindow("snap-%d" % i, 1)
87 cv.ShowImage("snap-%d" % i, img)
89 cv.DestroyAllWindows()
91 # Tests to run first; check the handful of basic operations that the later tests rely on
93 class PreliminaryTests(OpenCVTests):
96 # Check that the lena jpg image has loaded correctly
97 # This test uses a 'golden' MD5 hash of the Lena image
98 # If the JPEG decompressor changes, it is possible that the MD5 hash will change,
99 # so the hash here will need to change.
101 im = self.get_sample("samples/c/lena.jpg")
102 # self.snap(im) # uncomment this line to view the image, when regilding
103 self.assertEqual(hashlib.md5(im.tostring()).hexdigest(), "9dcd9247f9811c6ce86675ba7b0297b6")
105 def test_LoadImage(self):
106 self.assertRaises(TypeError, lambda: cv.LoadImage())
107 self.assertRaises(TypeError, lambda: cv.LoadImage(4))
108 self.assertRaises(TypeError, lambda: cv.LoadImage('foo.jpg', 1, 1))
109 self.assertRaises(TypeError, lambda: cv.LoadImage('foo.jpg', xiscolor=cv.CV_LOAD_IMAGE_COLOR))
111 def test_types(self):
112 self.assert_(type(cv.CreateImage((7,5), cv.IPL_DEPTH_8U, 1)) == cv.iplimage)
113 self.assert_(type(cv.CreateMat(5, 7, cv.CV_32FC1)) == cv.cvmat)
114 for i,t in enumerate(self.mat_types):
124 self.assertEqual(basefunc(1 + (i % 4)), t)
126 def test_tostring(self):
128 for w in [ 1, 4, 64, 512, 640]:
129 for h in [ 1, 4, 64, 480, 512]:
130 for c in [1, 2, 3, 4]:
131 for d in self.depths:
132 a = cv.CreateImage((w,h), d, c);
133 self.assert_(len(a.tostring()) == w * h * c * self.depthsize(d))
135 for w in [ 32, 96, 480 ]:
136 for h in [ 32, 96, 480 ]:
140 cv.IPL_DEPTH_16U : 2,
141 cv.IPL_DEPTH_16S : 2,
142 cv.IPL_DEPTH_32S : 4,
143 cv.IPL_DEPTH_32F : 4,
146 for f in self.depths:
147 for channels in (1,2,3,4):
148 img = cv.CreateImage((w, h), f, channels)
149 esize = (w * h * channels * depth_size[f])
150 self.assert_(len(img.tostring()) == esize)
151 cv.SetData(img, " " * esize, w * channels * depth_size[f])
152 self.assert_(len(img.tostring()) == esize)
185 for t in self.mat_types:
186 for im in [cv.CreateMat(h, w, t), cv.CreateMatND([h, w], t)]:
187 elemsize = cv.CV_MAT_CN(cv.GetElemType(im)) * mattype_size[cv.GetElemType(im)]
188 cv.SetData(im, " " * (w * h * elemsize), (w * elemsize))
189 esize = (w * h * elemsize)
190 self.assert_(len(im.tostring()) == esize)
191 cv.SetData(im, " " * esize, w * elemsize)
192 self.assert_(len(im.tostring()) == esize)
194 # Tests for specific OpenCV functions
196 class FunctionTests(OpenCVTests):
198 def test_AvgSdv(self):
199 m = cv.CreateMat(1, 8, cv.CV_32FC1)
200 for i,v in enumerate([2, 4, 4, 4, 5, 5, 7, 9]):
202 self.assertAlmostEqual(cv.Avg(m)[0], 5.0, 3)
203 avg,sdv = cv.AvgSdv(m)
204 self.assertAlmostEqual(avg[0], 5.0, 3)
205 self.assertAlmostEqual(sdv[0], 2.0, 3)
207 def test_CalcEMD2(self):
209 for r in [ 5, 10, 37, 38 ]:
210 scratch = cv.CreateImage((100,100), 8, 1)
212 cv.Circle(scratch, (50,50), r, 255, -1)
213 storage = cv.CreateMemStorage()
214 seq = cv.FindContours(scratch, storage, cv.CV_RETR_TREE, cv.CV_CHAIN_APPROX_SIMPLE)
215 arr = cv.CreateMat(len(seq), 3, cv.CV_32FC1)
216 for i,e in enumerate(seq):
222 return abs(A[0]-B[0]) + abs(A[1]-B[1])
224 return math.sqrt((A[0]-B[0])**2 + (A[1]-B[1])**2)
226 return max(abs(A[0]-B[0]), abs(A[1]-B[1]))
227 contours = set(cc.values())
230 self.assert_(abs(cv.CalcEMD2(c0, c1, cv.CV_DIST_L1) - cv.CalcEMD2(c0, c1, cv.CV_DIST_USER, myL1)) < 1e-3)
231 self.assert_(abs(cv.CalcEMD2(c0, c1, cv.CV_DIST_L2) - cv.CalcEMD2(c0, c1, cv.CV_DIST_USER, myL2)) < 1e-3)
232 self.assert_(abs(cv.CalcEMD2(c0, c1, cv.CV_DIST_C) - cv.CalcEMD2(c0, c1, cv.CV_DIST_USER, myC)) < 1e-3)
234 def test_CalcOpticalFlowBM(self):
235 a = self.get_sample("samples/c/lena.jpg", 0)
236 b = self.get_sample("samples/c/lena.jpg", 0)
237 (w,h) = cv.GetSize(a)
238 vel_size = (w - 8, h - 8)
239 velx = cv.CreateImage(vel_size, cv.IPL_DEPTH_32F, 1)
240 vely = cv.CreateImage(vel_size, cv.IPL_DEPTH_32F, 1)
241 cv.CalcOpticalFlowBM(a, b, (8,8), (1,1), (8,8), 0, velx, vely)
243 def test_CartToPolar(self):
244 x = cv.CreateMat(5, 5, cv.CV_32F)
245 y = cv.CreateMat(5, 5, cv.CV_32F)
246 mag = cv.CreateMat(5, 5, cv.CV_32F)
247 angle = cv.CreateMat(5, 5, cv.CV_32F)
248 x2 = cv.CreateMat(5, 5, cv.CV_32F)
249 y2 = cv.CreateMat(5, 5, cv.CV_32F)
256 for in_degrees in [False, True]:
257 cv.CartToPolar(x, y, mag, angle, in_degrees)
258 cv.PolarToCart(mag, angle, x2, y2, in_degrees)
261 self.assertAlmostEqual(x[i, j], x2[i, j], 1)
262 self.assertAlmostEqual(y[i, j], y2[i, j], 1)
264 def test_Circle(self):
265 for w,h in [(2,77), (77,2), (256, 256), (640,480)]:
266 img = cv.CreateImage((w,h), cv.IPL_DEPTH_8U, 1)
268 tricky = [ -8000, -2, -1, 0, 1, h/2, h-1, h, h+1, w/2, w-1, w, w+1, 8000]
271 for r in [ 0, 1, 2, 3, 4, 5, w/2, w-1, w, w+1, h/2, h-1, h, h+1, 8000 ]:
272 for thick in [1, 2, 10]:
273 for t in [0, 8, 4, cv.CV_AA]:
274 cv.Circle(img, (x0,y0), r, 255, thick, t)
275 # just check that something was drawn
276 self.assert_(cv.Sum(img)[0] > 0)
278 def test_ConvexHull2(self):
279 # Draw a series of N-pointed stars, find contours, assert the contour is not convex,
280 # assert the hull has N segments, assert that there are N convexity defects.
283 return (int(400 + r * math.cos(th)), int(400 + r * math.sin(th)))
284 storage = cv.CreateMemStorage(0)
285 for way in ['CvSeq', 'CvMat', 'list']:
286 for points in range(3,20):
287 scratch = cv.CreateImage((800,800), 8, 1)
290 cv.FillPoly(scratch, [ [ polar2xy(i * 2 * math.pi / sides, [100,350][i&1]) for i in range(sides) ] ], 255)
292 seq = cv.FindContours(scratch, storage, cv.CV_RETR_TREE, cv.CV_CHAIN_APPROX_SIMPLE)
299 arr = cv.CreateMat(len(seq), 1, cv.CV_32SC2)
300 for i,e in enumerate(seq):
304 # pts is a list of 2-tuples
309 self.assert_(cv.CheckContourConvexity(pts) == 0)
310 hull = cv.ConvexHull2(pts, storage, return_points = 1)
311 self.assert_(cv.CheckContourConvexity(hull) == 1)
312 self.assert_(len(hull) == points)
314 if way in [ 'CvSeq', 'CvMat' ]:
315 defects = cv.ConvexityDefects(pts, cv.ConvexHull2(pts, storage), storage)
316 self.assert_(len([depth for (_,_,_,depth) in defects if (depth > 5)]) == points)
318 def test_CreateImage(self):
319 for w in [ 1, 4, 64, 512, 640]:
320 for h in [ 1, 4, 64, 480, 512]:
321 for c in [1, 2, 3, 4]:
322 for d in self.depths:
323 a = cv.CreateImage((w,h), d, c);
324 self.assert_(a.width == w)
325 self.assert_(a.height == h)
326 self.assert_(a.nChannels == c)
327 self.assert_(a.depth == d)
328 self.assert_(cv.GetSize(a) == (w, h))
329 # self.assert_(cv.GetElemType(a) == d)
330 self.assertRaises(cv.error, lambda: cv.CreateImage((100, 100), 9, 1))
332 def test_CreateMat(self):
333 for rows in [1, 2, 4, 16, 64, 512, 640]:
334 for cols in [1, 2, 4, 16, 64, 512, 640]:
335 for t in self.mat_types:
336 m = cv.CreateMat(rows, cols, t)
337 self.assertEqual(cv.GetElemType(m), t)
338 self.assertEqual(m.type, t)
339 self.assertRaises(cv.error, lambda: cv.CreateMat(0, 100, cv.CV_8SC4))
340 self.assertRaises(cv.error, lambda: cv.CreateMat(100, 0, cv.CV_8SC4))
341 # Uncomment when ticket #100 is fixed
342 # self.assertRaises(cv.error, lambda: cv.CreateMat(100, 100, 666666))
344 def test_DrawChessboardCorners(self):
345 im = cv.CreateImage((512,512), cv.IPL_DEPTH_8U, 3)
347 cv.DrawChessboardCorners(im, (5, 5), [ (100,100) for i in range(5 * 5) ], 1)
348 self.assert_(cv.Sum(im)[0] > 0)
350 self.assertRaises(TypeError, lambda: cv.DrawChessboardCorners(im, (4, 5), [ (100,100) for i in range(5 * 5) ], 1))
352 def test_ExtractSURF(self):
353 img = self.get_sample("samples/c/lena.jpg", 0)
354 w,h = cv.GetSize(img)
355 for hessthresh in [ 300,400,500]:
357 for layers in [1,3,10]:
358 kp,desc = cv.ExtractSURF(img, None, cv.CreateMemStorage(), (dsize, hessthresh, 3, layers))
359 self.assert_(len(kp) == len(desc))
361 self.assert_(len(d) == {0:64, 1:128}[dsize])
362 for pt,laplacian,size,dir,hessian in kp:
363 self.assert_((0 <= pt[0]) and (pt[0] <= w))
364 self.assert_((0 <= pt[1]) and (pt[1] <= h))
365 self.assert_(laplacian in [-1, 0, 1])
366 self.assert_((0 <= dir) and (dir <= 360))
367 self.assert_(hessian >= hessthresh)
369 def test_FillPoly(self):
370 scribble = cv.CreateImage((640,480), cv.IPL_DEPTH_8U, 1)
374 self.assert_(cv.CountNonZero(scribble) == 0)
375 cv.FillPoly(scribble, [ [ (random.randrange(640), random.randrange(480)) for i in range(100) ] ], (255,))
376 self.assert_(cv.CountNonZero(scribble) != 0)
378 def test_FindChessboardCorners(self):
379 im = cv.CreateImage((512,512), cv.IPL_DEPTH_8U, 1)
383 status,corners = cv.FindChessboardCorners( im, (7,7) )
385 # Perfect checkerboard
387 return ((96 + o) + 40 * i, (96 + o) + 40 * j)
390 color = ((i ^ j) & 1) * 255
391 cv.Rectangle(im, xf(i,j, 0), xf(i,j, 39), color, cv.CV_FILLED)
392 status,corners = cv.FindChessboardCorners( im, (7,7) )
394 self.assert_(len(corners) == (7 * 7))
396 # Exercise corner display
397 im3 = cv.CreateImage(cv.GetSize(im), cv.IPL_DEPTH_8U, 3)
398 cv.Merge(im, im, im, None, im3)
399 cv.DrawChessboardCorners(im3, (7,7), corners, status)
404 # Run it with too many corners
408 color = ((i ^ j) & 1) * 255
411 cv.Rectangle(im, (x, y), (x+4, y+4), color, cv.CV_FILLED)
412 status,corners = cv.FindChessboardCorners( im, (7,7) )
414 # XXX - this is very slow
417 cv.RandArr(rng, im, cv.CV_RAND_UNI, 0, 255.0)
419 status,corners = cv.FindChessboardCorners( im, (7,7) )
421 def test_FindContours(self):
424 storage = cv.CreateMemStorage()
426 # First run FindContours on a black image.
427 scratch = cv.CreateImage((800,800), 8, 1)
429 seq = cv.FindContours(scratch, storage, cv.CV_RETR_TREE, cv.CV_CHAIN_APPROX_SIMPLE)
431 for trial in range(10):
432 scratch = cv.CreateImage((800,800), 8, 1)
434 def plot(center, radius, mode):
435 cv.Circle(scratch, center, radius, mode, -1)
440 subs = random.choice([1,2,3])
442 return [ plot(center, radius - 5, newmode) ]
444 newradius = int({ 2: radius / 2, 3: radius / 2.3 }[subs] - 5)
447 for i in range(subs):
448 th = i * (2 * math.pi) / subs
449 ret.append(plot((int(center[0] + r * math.cos(th)), int(center[1] + r * math.sin(th))), newradius, newmode))
452 actual = plot((400,400), 390, 255 )
454 seq = cv.FindContours(scratch, storage, cv.CV_RETR_TREE, cv.CV_CHAIN_APPROX_SIMPLE)
460 self.assert_(abs(cv.ContourArea(s)) > 0.0)
461 ((x,y),(w,h),th) = cv.MinAreaRect2(s, cv.CreateMemStorage())
462 self.assert_(((w / h) - 1.0) < 0.01)
463 self.assert_(abs(cv.ContourArea(s)) > 0.0)
466 r.append(traverse(s.v_next()))
469 self.assert_(traverse(seq.v_next()) == actual)
472 original = cv.CreateImage((800,800), 8, 1)
474 cv.Circle(original, (400, 400), 200, 255, -1)
475 cv.Circle(original, (100, 100), 20, 255, -1)
477 original = self.get_sample("samples/c/lena.jpg", 0)
478 cv.Threshold(original, original, 128, 255, cv.CV_THRESH_BINARY);
480 contours = cv.FindContours(original, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)
483 def contour_iterator(contour):
486 contour = contour.h_next()
488 # Should be 2 contours from the two circles above
489 self.assertEqual(len(list(contour_iterator(contours))), 2)
492 sketch = cv.CreateImage(cv.GetSize(original), 8, 3)
494 red = cv.RGB(255, 0, 0)
495 green = cv.RGB(0, 255, 0)
496 for c in contour_iterator(contours):
497 cv.DrawContours(sketch, c, red, green, 0)
500 def test_GetAffineTransform(self):
501 mapping = cv.CreateMat(2, 3, cv.CV_32FC1)
502 cv.GetAffineTransform([ (0,0), (1,0), (0,1) ], [ (0,0), (17,0), (0,17) ], mapping)
503 self.assertAlmostEqual(mapping[0,0], 17, 2)
504 self.assertAlmostEqual(mapping[1,1], 17, 2)
506 def test_GetRotationMatrix2D(self):
507 mapping = cv.CreateMat(2, 3, cv.CV_32FC1)
508 for scale in [0.0, 1.0, 2.0]:
509 for angle in [0.0, 360.0]:
510 cv.GetRotationMatrix2D((0,0), angle, scale, mapping)
517 self.assertAlmostEqual(mapping[r, c], e, 2)
519 def test_GetSize(self):
520 self.assert_(cv.GetSize(cv.CreateMat(5, 7, cv.CV_32FC1)) == (7,5))
521 self.assert_(cv.GetSize(cv.CreateImage((7,5), cv.IPL_DEPTH_8U, 1)) == (7,5))
523 def test_GetStarKeypoints(self):
524 src = self.get_sample("samples/c/lena.jpg", 0)
525 storage = cv.CreateMemStorage()
526 kp = cv.GetStarKeypoints(src, storage)
527 self.assert_(len(kp) > 0)
528 for (x,y),scale,r in kp:
530 self.assert_(x <= cv.GetSize(src)[0])
532 self.assert_(y <= cv.GetSize(src)[1])
534 scribble = cv.CreateImage(cv.GetSize(src), 8, 3)
535 cv.CvtColor(src, scribble, cv.CV_GRAY2BGR)
536 for (x,y),scale,r in kp:
538 cv.Circle(scribble, (x,y), scale, cv.RGB(255,0,0))
541 def test_GetSubRect(self):
542 src = cv.CreateImage((100,100), 8, 1)
543 data = "z" * (100 * 100)
545 cv.SetData(src, data, 100)
546 start_count = sys.getrefcount(data)
550 for i in range(iter):
551 sub = cv.GetSubRect(src, (0, 0, 10, 10))
553 self.assert_(sys.getrefcount(data) == (start_count + iter))
555 src = self.get_sample("samples/c/lena.jpg", 0)
556 made = cv.CreateImage(cv.GetSize(src), 8, 1)
557 sub = cv.CreateMat(32, 32, cv.CV_8UC1)
558 for x in range(0, 512, 32):
559 for y in range(0, 512, 32):
560 sub = cv.GetSubRect(src, (x, y, 32, 32))
561 cv.SetImageROI(made, (x, y, 32, 32))
563 cv.ResetImageROI(made)
564 cv.AbsDiff(made, src, made)
565 self.assert_(cv.CountNonZero(made) == 0)
567 def test_HoughLines2_PROBABILISTIC(self):
568 li = cv.HoughLines2(self.yield_line_image(),
569 cv.CreateMemStorage(),
570 cv.CV_HOUGH_PROBABILISTIC,
576 self.assert_(len(li) > 0)
577 self.assert_(li[0] != None)
579 def test_HoughLines2_STANDARD(self):
580 li = cv.HoughLines2(self.yield_line_image(),
581 cv.CreateMemStorage(),
582 cv.CV_HOUGH_STANDARD,
588 self.assert_(len(li) > 0)
589 self.assert_(li[0] != None)
591 def test_InPaint(self):
592 src = self.get_sample("doc/pics/building.jpg")
593 msk = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_8U, 1)
594 damaged = cv.CloneMat(src)
595 repaired = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_8U, 3)
596 difference = cv.CloneImage(repaired)
598 for method in [ cv.CV_INPAINT_NS, cv.CV_INPAINT_TELEA ]:
599 for (p0,p1) in [ ((10,10), (400,400)) ]:
600 cv.Line(damaged, p0, p1, cv.RGB(255, 0, 255), 2)
601 cv.Line(msk, p0, p1, 255, 2)
602 cv.Inpaint(damaged, msk, repaired, 10., cv.CV_INPAINT_NS)
603 cv.AbsDiff(src, repaired, difference)
604 #self.snapL([src, damaged, repaired, difference])
606 def test_InitLineIterator(self):
607 scribble = cv.CreateImage((640,480), cv.IPL_DEPTH_8U, 1)
608 self.assert_(len(list(cv.InitLineIterator(scribble, (20,10), (30,10)))) == 11)
610 def test_InRange(self):
613 Igray1 = cv.CreateImage(sz,cv.IPL_DEPTH_32F,1)
614 Ilow1 = cv.CreateImage(sz,cv.IPL_DEPTH_32F,1)
615 Ihi1 = cv.CreateImage(sz,cv.IPL_DEPTH_32F,1)
616 Igray2 = cv.CreateImage(sz,cv.IPL_DEPTH_32F,1)
617 Ilow2 = cv.CreateImage(sz,cv.IPL_DEPTH_32F,1)
618 Ihi2 = cv.CreateImage(sz,cv.IPL_DEPTH_32F,1)
620 Imask = cv.CreateImage(sz, cv.IPL_DEPTH_8U,1)
621 Imaskt = cv.CreateImage(sz,cv.IPL_DEPTH_8U,1)
623 cv.InRange(Igray1, Ilow1, Ihi1, Imask);
624 cv.InRange(Igray2, Ilow2, Ihi2, Imaskt);
626 cv.Or(Imask, Imaskt, Imask);
630 img = cv.CreateImage((w,h), cv.IPL_DEPTH_8U, 1)
632 tricky = [ -8000, -2, -1, 0, 1, h/2, h-1, h, h+1, w/2, w-1, w, w+1, 8000]
637 for thickness in [ 0, 1, 8 ]:
638 for line_type in [0, 4, 8, cv.CV_AA ]:
639 cv.Line(img, (x0,y0), (x1,y1), 255, thickness, line_type)
640 # just check that something was drawn
641 self.assert_(cv.Sum(img)[0] > 0)
643 def test_MinMaxLoc(self):
644 scribble = cv.CreateImage((640,480), cv.IPL_DEPTH_8U, 1)
645 los = [ (random.randrange(480), random.randrange(640)) for i in range(100) ]
646 his = [ (random.randrange(480), random.randrange(640)) for i in range(100) ]
647 for (lo,hi) in zip(los,his):
648 cv.Set(scribble, 128)
651 r = cv.MinMaxLoc(scribble)
652 self.assert_(r == (0, 255, tuple(reversed(lo)), tuple(reversed(hi))))
654 def test_Reshape(self):
659 im = cv.CreateMat( rows, cols, cv.CV_32FC1 )
660 elems = rows * cols * 1
662 return cv.GetSize(im) + (cv.CV_MAT_CN(cv.GetElemType(im)),)
664 for c in (1, 2, 3, 4):
665 nc,nr,nd = crd(cv.Reshape(im, c))
666 self.assert_(nd == c)
667 self.assert_((nc * nr * nd) == elems)
669 nc,nr,nd = crd(cv.Reshape(im, 0, 97*2))
670 self.assert_(nr == 97*2)
671 self.assert_((nc * nr * nd) == elems)
673 nc,nr,nd = crd(cv.Reshape(im, 3, 97*2))
674 self.assert_(nr == 97*2)
675 self.assert_(nd == 3)
676 self.assert_((nc * nr * nd) == elems)
678 return # XXX - blocked by fixes for #166, #150
680 # Now test ReshapeMatND
681 mat = cv.CreateMatND([2, 2, 2], cv.CV_32F)
682 print cv.ReshapeMatND(mat, 0, []);
685 for o in [ cv.CreateImage((128,128), cv.IPL_DEPTH_8U, 1), cv.CreateMat(16, 16, cv.CV_32FC1) ]:
686 cv.Save("test.save", o)
687 loaded = cv.Load("test.save", cv.CreateMemStorage())
688 self.assert_(type(o) == type(loaded))
690 def test_SetIdentity(self):
691 for r in range(1,16):
692 for c in range(1, 16):
693 for t in self.mat_types_single:
694 M = cv.CreateMat(r, c, t)
702 self.assertEqual(M[rj,cj], expected)
705 for r in range(1,11):
706 for c in range(1, 11):
707 for t in self.mat_types_single:
708 M = cv.CreateMat(r, c, t)
710 self.assertEqual(cv.Sum(M)[0], r * c)
712 def test_Threshold(self):
713 """ directed test for bug 2790622 """
714 src = self.get_sample("samples/c/lena.jpg", 0)
717 dst = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_8U, 1)
718 cv.Threshold(src, dst, 128, 128, cv.CV_THRESH_BINARY)
719 results.add(dst.tostring())
720 # Should have produced the same answer every time, so results set should have size 1
721 self.assert_(len(results) == 1)
723 # ticket #71 repro attempt
724 image = self.get_sample("samples/c/lena.jpg", 0)
725 red = cv.CreateImage(cv.GetSize(image), 8, 1)
726 binary = cv.CreateImage(cv.GetSize(image), 8, 1)
727 cv.Split(image, red, None, None, None)
728 cv.Threshold(red, binary, 42, 255, cv.CV_THRESH_BINARY)
730 ##############################################################################
732 def yield_line_image(self):
733 """ Needed by HoughLines tests """
734 src = self.get_sample("doc/pics/building.jpg", 0)
735 dst = cv.CreateImage(cv.GetSize(src), 8, 1)
736 cv.Canny(src, dst, 50, 200, 3)
739 # Tests for functional areas
741 class AreaTests(OpenCVTests):
743 def test_numpy(self):
744 if 'fromarray' in dir(cv):
747 def convert(numpydims):
748 """ Create a numpy array with specified dims, return the OpenCV CvMat """
749 a1 = numpy.array([1] * reduce(operator.__mul__, numpydims)).reshape(*numpydims)
750 return cv.fromarray(a1)
752 (col, row) = cv.GetSize(m)
753 chan = cv.CV_MAT_CN(cv.GetElemType(m))
754 return (row, col, chan)
756 self.assertEqual(row_col_chan(convert((2, 13))), (2, 13, 1))
757 self.assertEqual(row_col_chan(convert((2, 13, 4))), (2, 13, 4))
758 self.assertEqual(row_col_chan(convert((2, 13, cv.CV_CN_MAX))), (2, 13, cv.CV_CN_MAX))
759 self.assertRaises(TypeError, lambda: convert((2,)))
760 self.assertRaises(TypeError, lambda: convert((11, 17, cv.CV_CN_MAX + 1)))
762 for t in [cv.CV_16UC1, cv.CV_32SC1, cv.CV_32FC1]:
763 for d in [ (8,), (1,7), (2,3,4), (7,9,2,1,8), (1,2,3,4,5,6,7,8) ]:
764 total = reduce(operator.__mul__, d)
765 m = cv.CreateMatND(d, t)
766 for i in range(total):
768 na = numpy.asarray(m).reshape((total,))
769 self.assertEqual(list(na), range(total))
771 # now do numpy -> cvmat, and verify
772 m2 = cv.fromarray(na, True)
774 # Check that new cvmat m2 contains same counting sequence
775 for i in range(total):
776 self.assertEqual(cv.Get1D(m, i)[0], i)
778 # Verify round-trip for 2D arrays
779 for rows in [2, 3, 7, 13]:
780 for cols in [2, 3, 7, 13]:
781 for allowND in [False, True]:
782 im = cv.CreateMatND([rows, cols], cv.CV_16UC1)
784 a = numpy.asarray(im)
785 self.assertEqual(a.shape, (rows, cols))
786 cvmatnd = cv.fromarray(a, allowND)
787 self.assertEqual(cv.GetDims(cvmatnd), (rows, cols))
789 # im, a and cvmatnd all point to the same data, so...
790 for i,coord in enumerate([(0,0), (0,1), (1,0), (1,1)]):
793 self.assertEqual(im[coord], v)
794 self.assertEqual(cvmatnd[coord], v)
796 # Cv -> Numpy 3 channel check
797 im = cv.CreateMatND([2, 13], cv.CV_16UC3)
798 self.assertEqual(numpy.asarray(im).shape, (2, 13, 3))
800 # multi-dimensional NumPy array
801 na = numpy.ones([7,9,2,1,8])
802 cm = cv.fromarray(na, True)
806 print "SKIPPING test_numpy - numpy support not built"
808 def test_stereo(self):
809 bm = cv.CreateStereoBMState()
810 def illegal_delete():
811 bm = cv.CreateStereoBMState()
813 def illegal_assign():
814 bm = cv.CreateStereoBMState()
815 bm.preFilterType = "foo"
817 self.assertRaises(TypeError, illegal_delete)
818 self.assertRaises(TypeError, illegal_assign)
820 left = self.get_sample("samples/c/lena.jpg", 0)
821 right = self.get_sample("samples/c/lena.jpg", 0)
822 disparity = cv.CreateMat(512, 512, cv.CV_16SC1)
823 cv.FindStereoCorrespondenceBM(left, right, disparity, bm)
825 gc = cv.CreateStereoGCState(16, 2)
826 left_disparity = cv.CreateMat(512, 512, cv.CV_16SC1)
827 right_disparity = cv.CreateMat(512, 512, cv.CV_16SC1)
828 cv.FindStereoCorrespondenceGC(left, right, left_disparity, right_disparity, gc)
830 def test_kalman(self):
831 k = cv.CreateKalman(2, 1, 0)
833 def failing_test_exception(self):
834 a = cv.CreateImage((640, 480), cv.IPL_DEPTH_8U, 1)
835 b = cv.CreateImage((640, 480), cv.IPL_DEPTH_8U, 1)
836 self.assertRaises(cv.error, lambda: cv.Laplace(a, b))
838 def test_cvmat_accessors(self):
839 cvm = cv.CreateMat(20, 10, cv.CV_32FC1)
841 def test_depths(self):
842 """ Make sure that the depth enums are unique """
843 self.assert_(len(self.depths) == len(set(self.depths)))
846 """ If CreateImage is not releasing image storage, then the loop below should use ~4GB of memory. """
847 for i in range(4000):
848 a = cv.CreateImage((1024,1024), cv.IPL_DEPTH_8U, 1)
849 for i in range(4000):
850 a = cv.CreateMat(1024, 1024, cv.CV_8UC1)
852 def test_histograms(self):
854 nchans = cv.CV_MAT_CN(cv.GetElemType(im))
855 c = [ cv.CreateImage(cv.GetSize(im), cv.IPL_DEPTH_8U, 1) for i in range(nchans) ] + [None] * (4 - nchans)
856 cv.Split(im, c[0], c[1], c[2], c[3])
860 hist = cv.CreateHist([256] * len(s), cv.CV_HIST_ARRAY, [ (0,255) ] * len(s), 1)
861 cv.CalcHist(s, hist, 0)
866 a = cv.CreateHist(dims, cv.CV_HIST_ARRAY , ranges, 1)
867 src = self.get_sample("samples/c/lena.jpg", 0)
869 (minv, maxv, minl, maxl) = cv.GetMinMaxHistValue(h)
870 self.assert_(cv.QueryHistValue_nD(h, minl) == minv)
871 self.assert_(cv.QueryHistValue_nD(h, maxl) == maxv)
872 bp = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_8U, 1)
873 cv.CalcBackProject(split(src), bp, h)
874 bp = cv.CreateImage((cv.GetSize(src)[0]-2, cv.GetSize(src)[1]-2), cv.IPL_DEPTH_32F, 1)
875 cv.CalcBackProjectPatch(split(src), bp, (3,3), h, cv.CV_COMP_INTERSECT, 1)
877 for meth,expected in [(cv.CV_COMP_CORREL, 1.0), (cv.CV_COMP_CHISQR, 0.0), (cv.CV_COMP_INTERSECT, 1.0), (cv.CV_COMP_BHATTACHARYYA, 0.0)]:
878 self.assertEqual(cv.CompareHist(h, h, meth), expected)
880 def test_arithmetic(self):
881 a = cv.CreateMat(4, 4, cv.CV_8UC1)
883 b = cv.CreateMat(4, 4, cv.CV_8UC1)
885 d = cv.CreateMat(4, 4, cv.CV_8UC1)
887 self.assertEqual(d[0,0], 54.0)
889 self.assertEqual(d[0,0], 200.0)
892 def failing_test_cvtcolor(self):
893 src3 = self.get_sample("samples/c/lena.jpg")
894 src1 = self.get_sample("samples/c/lena.jpg", 0)
895 dst8u = dict([(c,cv.CreateImage(cv.GetSize(src1), cv.IPL_DEPTH_8U, c)) for c in (1,2,3,4)])
896 dst16u = dict([(c,cv.CreateImage(cv.GetSize(src1), cv.IPL_DEPTH_16U, c)) for c in (1,2,3,4)])
897 dst32f = dict([(c,cv.CreateImage(cv.GetSize(src1), cv.IPL_DEPTH_32F, c)) for c in (1,2,3,4)])
899 for srcf in ["BGR", "RGB"]:
901 cv.CvtColor(src3, dst8u[3], eval("cv.CV_%s2%s" % (srcf, dstf)))
902 cv.CvtColor(src3, dst32f[3], eval("cv.CV_%s2%s" % (srcf, dstf)))
903 cv.CvtColor(src3, dst8u[3], eval("cv.CV_%s2%s" % (dstf, srcf)))
905 for srcf in ["BayerBG", "BayerGB", "BayerGR"]:
906 for dstf in ["RGB", "BGR"]:
907 cv.CvtColor(src1, dst8u[3], eval("cv.CV_%s2%s" % (srcf, dstf)))
909 def test_voronoi(self):
912 storage = cv.CreateMemStorage(0)
917 e = cv.Subdiv2DGetEdge(e, cv.CV_NEXT_AROUND_LEFT)
926 pts = [ cv.Subdiv2DEdgeOrg(e) for e in facet_edges(edge) ]
927 if not (None in pts):
928 l = [p.pt for p in pts]
930 if not(ls in seensorted):
932 seensorted.append(ls)
935 for npoints in range(1, 200):
936 points = [ (random.randrange(w), random.randrange(h)) for i in range(npoints) ]
937 subdiv = cv.CreateSubdivDelaunay2D( (0,0,w,h), storage )
939 cv.SubdivDelaunay2DInsert( subdiv, p)
940 cv.CalcSubdivVoronoi2D(subdiv)
941 ars = areas([ cv.Subdiv2DRotateEdge(e, 1) for e in subdiv.edges ] + [ cv.Subdiv2DRotateEdge(e, 3) for e in subdiv.edges ])
942 self.assert_(len(ars) == len(set(points)))
945 img = cv.CreateImage((w,h), cv.IPL_DEPTH_8U, 3)
947 def T(x): return int(x) # int(300+x/16)
949 cv.FillConvexPoly( img, [(T(x),T(y)) for (x,y) in pts], cv.RGB(100+random.randrange(156),random.randrange(256),random.randrange(256)), cv.CV_AA, 0 );
951 cv.Circle(img, (T(x), T(y)), 3, cv.RGB(0,0,0), -1)
953 cv.ShowImage("snap", img)
954 if cv.WaitKey(10) > 0:
957 def perf_test_pow(self):
958 mt = cv.CreateMat(1000, 1000, cv.CV_32FC1)
959 dst = cv.CreateMat(1000, 1000, cv.CV_32FC1)
961 cv.RandArr(rng, mt, cv.CV_RAND_UNI, 0, 1000.0)
964 for a in [0.5, 2.0, 2.3, 2.4, 3.0, 37.1786] + [2.4]*10:
965 started = time.time()
968 took = (time.time() - started) / 1e7
969 print "%4.1f took %f ns" % (a, took * 1e9)
970 print dst[0,0], 10 ** 2.4
972 def test_access_row_col(self):
973 src = cv.CreateImage((8,3), 8, 1)
978 # in an array (3 rows, 8 columns).
979 # Then extract the array in various ways.
981 for r,w in enumerate(("Achilles", "Benedict", "Congreve")):
982 for c,v in enumerate(w):
984 self.assertEqual(src.tostring(), "AchillesBenedictCongreve")
985 self.assertEqual(src[:,:].tostring(), "AchillesBenedictCongreve")
986 self.assertEqual(src[:,:4].tostring(), "AchiBeneCong")
987 self.assertEqual(src[:,0].tostring(), "ABC")
988 self.assertEqual(src[:,4:].tostring(), "llesdictreve")
989 self.assertEqual(src[::2,:].tostring(), "AchillesCongreve")
990 self.assertEqual(src[1:,:].tostring(), "BenedictCongreve")
991 self.assertEqual(src[1:2,:].tostring(), "Benedict")
992 self.assertEqual(src[::2,:4].tostring(), "AchiCong")
993 # The mats share the same storage, so updating one should update them all
995 self.assertEqual(lastword.tostring(), "Congreve")
997 self.assertEqual(lastword.tostring(), "Kongreve")
1008 mt = cv.CreateMatND([2,3,4], cv.CV_8UC1)
1012 mt[i,j,k] = ord('A') + k + 4 * (j + 3 * i)
1013 self.assertEqual(mt[:,:,:1].tostring(), "AEIMQU")
1014 self.assertEqual(mt[:,:1,:].tostring(), "ABCDMNOP")
1015 self.assertEqual(mt[:1,:,:].tostring(), "ABCDEFGHIJKL")
1016 self.assertEqual(mt[1,1].tostring(), "QRST")
1017 self.assertEqual(mt[:,::2,:].tostring(), "ABCDIJKLMNOPUVWX")
1019 # Exercise explicit GetRows
1020 self.assertEqual(cv.GetRows(src, 0, 3).tostring(), "AchillesBenedictCongreve")
1021 self.assertEqual(cv.GetRows(src, 0, 3, 1).tostring(), "AchillesBenedictCongreve")
1022 self.assertEqual(cv.GetRows(src, 0, 3, 2).tostring(), "AchillesCongreve")
1024 self.assertEqual(cv.GetRow(src, 0).tostring(), "Achilles")
1026 self.assertEqual(cv.GetCols(src, 0, 4).tostring(), "AchiBeneCong")
1028 self.assertEqual(cv.GetCol(src, 0).tostring(), "ABC")
1029 self.assertEqual(cv.GetCol(src, 1).tostring(), "ceo")
1031 self.assertEqual(cv.GetDiag(src, 0).tostring(), "Aen")
1033 # Check that matrix type is preserved by the various operators
1035 for mt in self.mat_types:
1036 m = cv.CreateMat(5, 3, mt)
1037 self.assertEqual(mt, cv.GetElemType(cv.GetRows(m, 0, 2)))
1038 self.assertEqual(mt, cv.GetElemType(cv.GetRow(m, 0)))
1039 self.assertEqual(mt, cv.GetElemType(cv.GetCols(m, 0, 2)))
1040 self.assertEqual(mt, cv.GetElemType(cv.GetCol(m, 0)))
1041 self.assertEqual(mt, cv.GetElemType(cv.GetDiag(m, 0)))
1042 self.assertEqual(mt, cv.GetElemType(m[0]))
1043 self.assertEqual(mt, cv.GetElemType(m[::2]))
1044 self.assertEqual(mt, cv.GetElemType(m[:,0]))
1045 self.assertEqual(mt, cv.GetElemType(m[:,:]))
1046 self.assertEqual(mt, cv.GetElemType(m[::2,:]))
1048 def test_addS_3D(self):
1049 for dim in [ [1,1,4], [2,2,3], [7,4,3] ]:
1050 for ty,ac in [ (cv.CV_32FC1, 'f'), (cv.CV_64FC1, 'd')]:
1051 mat = cv.CreateMatND(dim, ty)
1052 mat2 = cv.CreateMatND(dim, ty)
1053 for increment in [ 0, 3, -1 ]:
1054 cv.SetData(mat, array.array(ac, range(dim[0] * dim[1] * dim[2])), 0)
1055 cv.AddS(mat, increment, mat2)
1056 for i in range(dim[0]):
1057 for j in range(dim[1]):
1058 for k in range(dim[2]):
1059 self.assert_(mat2[i,j,k] == mat[i,j,k] + increment)
1061 def test_buffers(self):
1062 ar = array.array('f', [7] * (360*640))
1064 m = cv.CreateMat(360, 640, cv.CV_32FC1)
1065 cv.SetData(m, ar, 4 * 640)
1066 self.assert_(m[0,0] == 7.0)
1068 m = cv.CreateMatND((360, 640), cv.CV_32FC1)
1069 cv.SetData(m, ar, 4 * 640)
1070 self.assert_(m[0,0] == 7.0)
1072 m = cv.CreateImage((640, 360), cv.IPL_DEPTH_32F, 1)
1073 cv.SetData(m, ar, 4 * 640)
1074 self.assert_(m[0,0] == 7.0)
1076 def xxtest_Filters(self):
1078 m = cv.CreateMat(360, 640, cv.CV_32FC1)
1079 d = cv.CreateMat(360, 640, cv.CV_32FC1)
1080 for k in range(3, 21, 2):
1081 started = time.time()
1082 for i in range(1000):
1083 cv.Smooth(m, m, param1=k)
1084 print k, "took", time.time() - started
1086 def assertSame(self, a, b):
1088 d = cv.CreateMat(h, w, cv.CV_8UC1)
1090 self.assert_(cv.CountNonZero(d) == 0)
1092 def test_text(self):
1093 img = cv.CreateImage((640,40), cv.IPL_DEPTH_8U, 1)
1095 font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1)
1097 cv.PutText(img, message, (320,30), font, 255)
1098 ((w,h),bl) = cv.GetTextSize(message, font)
1100 # Find nonzero in X and Y
1102 for x in range(640):
1103 cv.SetImageROI(img, (x, 0, 1, 40))
1104 Xs.append(cv.Sum(img)[0] > 0)
1106 return (l.index(True), len(l) - list(reversed(l)).index(True))
1110 cv.SetImageROI(img, (0, y, 640, 1))
1111 Ys.append(cv.Sum(img)[0] > 0)
1113 x0,x1 = firstlast(Xs)
1114 y0,y1 = firstlast(Ys)
1115 actual_width = x1 - x0
1116 actual_height = y1 - y0
1118 # actual_width can be up to 8 pixels smaller than GetTextSize says
1119 self.assert_(actual_width <= w)
1120 self.assert_((w - actual_width) <= 8)
1122 # actual_height can be up to 4 pixels smaller than GetTextSize says
1123 self.assert_(actual_height <= (h + bl))
1124 self.assert_(((h + bl) - actual_height) <= 4)
1126 cv.ResetImageROI(img)
1127 self.assert_(w != 0)
1128 self.assert_(h != 0)
1130 def test_sizes(self):
1131 sizes = [ 1, 2, 3, 97, 255, 256, 257, 947 ]
1134 # Create an IplImage
1135 im = cv.CreateImage((w,h), cv.IPL_DEPTH_8U, 1)
1137 self.assert_(cv.Sum(im)[0] == (w * h))
1140 mt = cv.CreateMat(h, w, cv.CV_8UC1)
1142 self.assert_(cv.Sum(mt)[0] == (w * h))
1145 for dim in range(1, cv.CV_MAX_DIM + 1):
1146 for attempt in range(10):
1147 dims = [ random.choice([1,1,1,1,2,3]) for i in range(dim) ]
1148 mt = cv.CreateMatND(dims, cv.CV_8UC1)
1150 self.assert_(cv.Sum(mt)[0] == 0)
1151 # Set to all-ones, verify the sum
1156 self.assert_(cv.Sum(mt)[0] == expected)
1158 def test_random(self):
1159 seeds = [ 0, 1, 2**48, 2**48 + 1 ]
1163 sequences.add(str([cv.RandInt(rng) for i in range(10)]))
1164 self.assert_(len(seeds) == len(sequences))
1167 im = cv.CreateImage((1024,1024), cv.IPL_DEPTH_8U, 1)
1168 cv.RandArr(rng, im, cv.CV_RAND_UNI, 0, 256)
1169 cv.RandArr(rng, im, cv.CV_RAND_NORMAL, 128, 30)
1171 hist = cv.CreateHist([ 256 ], cv.CV_HIST_ARRAY, [ (0,255) ], 1)
1172 cv.CalcHist([im], hist)
1175 for i in range(1000):
1176 v = cv.RandReal(rng)
1177 self.assert_(0 <= v)
1180 for mode in [ cv.CV_RAND_UNI, cv.CV_RAND_NORMAL ]:
1181 for fmt in self.mat_types:
1182 mat = cv.CreateMat(64, 64, fmt)
1183 cv.RandArr(cv.RNG(), mat, mode, (0,0,0,0), (1,1,1,1))
1185 def test_MixChannels(self):
1187 # First part - test the single case described in the documentation
1188 rgba = cv.CreateMat(100, 100, cv.CV_8UC4)
1189 bgr = cv.CreateMat(100, 100, cv.CV_8UC3)
1190 alpha = cv.CreateMat(100, 100, cv.CV_8UC1)
1191 cv.Set(rgba, (1,2,3,4))
1192 cv.MixChannels([rgba], [bgr, alpha], [
1193 (0, 2), # rgba[0] -> bgr[2]
1194 (1, 1), # rgba[1] -> bgr[1]
1195 (2, 0), # rgba[2] -> bgr[0]
1196 (3, 3) # rgba[3] -> alpha[0]
1198 self.assert_(bgr[0,0] == (3,2,1))
1199 self.assert_(alpha[0,0] == 4)
1201 # Second part. Choose random sets of sources and destinations,
1202 # fill them with known values, choose random channel assignments,
1203 # run cvMixChannels and check that the result is as expected.
1207 for rows in [1,2,4,13,64,1000]:
1208 for cols in [1,2,4,13,64,1000]:
1209 for loop in range(5):
1210 sources = [random.choice([1, 2, 3, 4]) for i in range(8)]
1211 dests = [random.choice([1, 2, 3, 4]) for i in range(8)]
1212 # make sure that fromTo does not have duplicates in dests, otherwise the result is not determined
1214 fromTo = [(random.randrange(-1, sum(sources)), random.randrange(sum(dests))) for i in range(random.randrange(1, 30))]
1215 dests_set = list(set([j for (i, j) in fromTo]))
1216 if len(dests_set) == len(dests):
1224 return [cv.CV_8UC1, cv.CV_8UC2, cv.CV_8UC3, cv.CV_8UC4][n-1]
1225 source_m = [cv.CreateMat(rows, cols, CV_8UC(c)) for c in sources]
1226 dest_m = [cv.CreateMat(rows, cols, CV_8UC(c)) for c in dests]
1229 # return the contents of the N channel mat m[0,0] as a N-length list
1230 chans = cv.CV_MAT_CN(cv.GetElemType(m))
1234 return list(m[0,0])[:chans]
1236 # Sources numbered from 50, destinations numbered from 100
1238 for i in range(len(sources)):
1239 s = sum(sources[:i]) + 50
1240 cv.Set(source_m[i], (s, s+1, s+2, s+3))
1241 self.assertEqual(m00(source_m[i]), [s, s+1, s+2, s+3][:sources[i]])
1243 for i in range(len(dests)):
1244 s = sum(dests[:i]) + 100
1245 cv.Set(dest_m[i], (s, s+1, s+2, s+3))
1246 self.assertEqual(m00(dest_m[i]), [s, s+1, s+2, s+3][:dests[i]])
1248 # now run the sanity check
1250 for i in range(len(sources)):
1251 s = sum(sources[:i]) + 50
1252 self.assertEqual(m00(source_m[i]), [s, s+1, s+2, s+3][:sources[i]])
1254 for i in range(len(dests)):
1255 s = sum(dests[:i]) + 100
1256 self.assertEqual(m00(dest_m[i]), [s, s+1, s+2, s+3][:dests[i]])
1258 cv.MixChannels(source_m, dest_m, fromTo)
1260 expected = range(100, 100 + sum(dests))
1261 for (i, j) in fromTo:
1265 expected[j] = 50 + i
1267 actual = sum([m00(m) for m in dest_m], [])
1268 self.assertEqual(sum([m00(m) for m in dest_m], []), expected)
1270 def test_allocs(self):
1271 mats = [ 0 for i in range(20) ]
1272 for i in range(1000):
1273 m = cv.CreateMat(random.randrange(10, 512), random.randrange(10, 512), cv.CV_8UC1)
1274 j = random.randrange(len(mats))
1278 def test_access(self):
1279 cnames = { 1:cv.CV_32FC1, 2:cv.CV_32FC2, 3:cv.CV_32FC3, 4:cv.CV_32FC4 }
1281 for w in range(1,11):
1282 for h in range(2,11):
1284 for o in [ cv.CreateMat(h, w, cnames[c]), cv.CreateImage((w,h), cv.IPL_DEPTH_32F, c) ][1:]:
1285 pattern = [ (i,j) for i in range(w) for j in range(h) ]
1286 random.shuffle(pattern)
1287 for k,(i,j) in enumerate(pattern):
1292 for k,(i,j) in enumerate(pattern):
1294 self.assert_(o[j,i] == k)
1296 self.assert_(o[j,i] == (k,)*c)
1298 test_mat = cv.CreateMat(2, 3, cv.CV_32FC1)
1299 cv.SetData(test_mat, array.array('f', range(6)), 12)
1300 self.assertEqual(cv.GetDims(test_mat[0]), (1, 3))
1301 self.assertEqual(cv.GetDims(test_mat[1]), (1, 3))
1302 self.assertEqual(cv.GetDims(test_mat[0:1]), (1, 3))
1303 self.assertEqual(cv.GetDims(test_mat[1:2]), (1, 3))
1304 self.assertEqual(cv.GetDims(test_mat[-1:]), (1, 3))
1305 self.assertEqual(cv.GetDims(test_mat[-1]), (1, 3))
1307 def xxxtest_corners(self):
1308 a = cv.LoadImage("foo-mono.png", 0)
1309 cv.AdaptiveThreshold(a, a, 255, param1=5)
1310 scribble = cv.CreateImage(cv.GetSize(a), 8, 3)
1311 cv.CvtColor(a, scribble, cv.CV_GRAY2BGR)
1313 eig_image = cv.CreateImage(cv.GetSize(a), cv.IPL_DEPTH_32F, 1)
1314 temp_image = cv.CreateImage(cv.GetSize(a), cv.IPL_DEPTH_32F, 1)
1315 pts = cv.GoodFeaturesToTrack(a, eig_image, temp_image, 100, 0.04, 2, use_harris=1)
1317 cv.Circle( scribble, p, 1, cv.RGB(255,0,0), -1 )
1319 canny = cv.CreateImage(cv.GetSize(a), 8, 1)
1320 cv.SubRS(a, 255, canny)
1322 li = cv.HoughLines2(canny,
1323 cv.CreateMemStorage(),
1324 cv.CV_HOUGH_STANDARD,
1330 for (rho,theta) in li:
1337 (x0 + 1000*(-s), y0 + 1000*c),
1338 (x0 + -1000*(-s), y0 - 1000*c),
1342 def test_calibration(self):
1344 def get_corners(mono, refine = False):
1345 (ok, corners) = cv.FindChessboardCorners(mono, (num_x_ints, num_y_ints), cv.CV_CALIB_CB_ADAPTIVE_THRESH | cv.CV_CALIB_CB_NORMALIZE_IMAGE)
1347 corners = cv.FindCornerSubPix(mono, corners, (5,5), (-1,-1), ( cv.CV_TERMCRIT_EPS+cv.CV_TERMCRIT_ITER, 30, 0.1 ))
1348 return (ok, corners)
1350 def mk_object_points(nimages, squaresize = 1):
1351 opts = cv.CreateMat(nimages * num_pts, 3, cv.CV_32FC1)
1352 for i in range(nimages):
1353 for j in range(num_pts):
1354 opts[i * num_pts + j, 0] = (j / num_x_ints) * squaresize
1355 opts[i * num_pts + j, 1] = (j % num_x_ints) * squaresize
1356 opts[i * num_pts + j, 2] = 0
1359 def mk_image_points(goodcorners):
1360 ipts = cv.CreateMat(len(goodcorners) * num_pts, 2, cv.CV_32FC1)
1361 for (i, co) in enumerate(goodcorners):
1362 for j in range(num_pts):
1363 ipts[i * num_pts + j, 0] = co[j][0]
1364 ipts[i * num_pts + j, 1] = co[j][1]
1367 def mk_point_counts(nimages):
1368 npts = cv.CreateMat(nimages, 1, cv.CV_32SC1)
1369 for i in range(nimages):
1370 npts[i, 0] = num_pts
1373 def cvmat_iterator(cvmat):
1374 for i in range(cvmat.rows):
1375 for j in range(cvmat.cols):
1378 def image_from_archive(tar, name):
1379 member = tar.getmember(name)
1380 filedata = tar.extractfile(member).read()
1381 imagefiledata = cv.CreateMat(1, len(filedata), cv.CV_8UC1)
1382 cv.SetData(imagefiledata, filedata, len(filedata))
1383 return cv.DecodeImageM(imagefiledata)
1385 urllib.urlretrieve("http://pr.willowgarage.com/data/camera_calibration/camera_calibration.tar.gz", "camera_calibration.tar.gz")
1386 tf = tarfile.open("camera_calibration.tar.gz")
1390 num_pts = num_x_ints * num_y_ints
1392 leftimages = [image_from_archive(tf, "wide/left%04d.pgm" % i) for i in range(3, 15)]
1393 size = cv.GetSize(leftimages[0])
1398 corners = [get_corners(i) for i in leftimages]
1399 goodcorners = [co for (im, (ok, co)) in zip(leftimages, corners) if ok]
1401 ipts = mk_image_points(goodcorners)
1402 opts = mk_object_points(len(goodcorners), .1)
1403 npts = mk_point_counts(len(goodcorners))
1405 intrinsics = cv.CreateMat(3, 3, cv.CV_64FC1)
1406 distortion = cv.CreateMat(4, 1, cv.CV_64FC1)
1407 cv.SetZero(intrinsics)
1408 cv.SetZero(distortion)
1409 # focal lengths have 1/1 ratio
1410 intrinsics[0,0] = 1.0
1411 intrinsics[1,1] = 1.0
1412 cv.CalibrateCamera2(opts, ipts, npts,
1413 cv.GetSize(leftimages[0]),
1416 cv.CreateMat(len(goodcorners), 3, cv.CV_32FC1),
1417 cv.CreateMat(len(goodcorners), 3, cv.CV_32FC1),
1418 flags = 0) # cv.CV_CALIB_ZERO_TANGENT_DIST)
1419 # print "D =", list(cvmat_iterator(distortion))
1420 # print "K =", list(cvmat_iterator(intrinsics))
1422 newK = cv.CreateMat(3, 3, cv.CV_64FC1)
1423 cv.GetOptimalNewCameraMatrix(intrinsics, distortion, size, 1.0, newK)
1424 # print "newK =", list(cvmat_iterator(newK))
1426 mapx = cv.CreateImage((640, 480), cv.IPL_DEPTH_32F, 1)
1427 mapy = cv.CreateImage((640, 480), cv.IPL_DEPTH_32F, 1)
1428 for K in [ intrinsics, newK ]:
1429 cv.InitUndistortMap(K, distortion, mapx, mapy)
1430 for img in leftimages[:1]:
1431 r = cv.CloneMat(img)
1432 cv.Remap(img, r, mapx, mapy)
1433 # cv.ShowImage("snap", r)
1436 rightimages = [image_from_archive(tf, "wide/right%04d.pgm" % i) for i in range(3, 15)]
1441 lcorners = [get_corners(i) for i in leftimages]
1442 rcorners = [get_corners(i) for i in rightimages]
1443 good = [(lco, rco) for ((lok, lco), (rok, rco)) in zip(lcorners, rcorners) if (lok and rok)]
1445 lipts = mk_image_points([l for (l, r) in good])
1446 ripts = mk_image_points([r for (l, r) in good])
1447 opts = mk_object_points(len(good), .108)
1448 npts = mk_point_counts(len(good))
1450 flags = cv.CV_CALIB_FIX_ASPECT_RATIO | cv.CV_CALIB_FIX_INTRINSIC
1451 flags = cv.CV_CALIB_SAME_FOCAL_LENGTH + cv.CV_CALIB_FIX_PRINCIPAL_POINT + cv.CV_CALIB_ZERO_TANGENT_DIST
1454 T = cv.CreateMat(3, 1, cv.CV_64FC1)
1455 R = cv.CreateMat(3, 3, cv.CV_64FC1)
1456 lintrinsics = cv.CreateMat(3, 3, cv.CV_64FC1)
1457 ldistortion = cv.CreateMat(4, 1, cv.CV_64FC1)
1458 rintrinsics = cv.CreateMat(3, 3, cv.CV_64FC1)
1459 rdistortion = cv.CreateMat(4, 1, cv.CV_64FC1)
1460 lR = cv.CreateMat(3, 3, cv.CV_64FC1)
1461 rR = cv.CreateMat(3, 3, cv.CV_64FC1)
1462 lP = cv.CreateMat(3, 4, cv.CV_64FC1)
1463 rP = cv.CreateMat(3, 4, cv.CV_64FC1)
1464 lmapx = cv.CreateImage(size, cv.IPL_DEPTH_32F, 1)
1465 lmapy = cv.CreateImage(size, cv.IPL_DEPTH_32F, 1)
1466 rmapx = cv.CreateImage(size, cv.IPL_DEPTH_32F, 1)
1467 rmapy = cv.CreateImage(size, cv.IPL_DEPTH_32F, 1)
1469 cv.SetIdentity(lintrinsics)
1470 cv.SetIdentity(rintrinsics)
1471 lintrinsics[0,2] = size[0] * 0.5
1472 lintrinsics[1,2] = size[1] * 0.5
1473 rintrinsics[0,2] = size[0] * 0.5
1474 rintrinsics[1,2] = size[1] * 0.5
1475 cv.SetZero(ldistortion)
1476 cv.SetZero(rdistortion)
1478 cv.StereoCalibrate(opts, lipts, ripts, npts,
1479 lintrinsics, ldistortion,
1480 rintrinsics, rdistortion,
1484 cv.CreateMat(3, 3, cv.CV_32FC1), # E
1485 cv.CreateMat(3, 3, cv.CV_32FC1), # F
1486 (cv.CV_TERMCRIT_ITER + cv.CV_TERMCRIT_EPS, 30, 1e-5),
1489 for a in [-1, 0, 1]:
1490 cv.StereoRectify(lintrinsics,
1500 cv.InitUndistortRectifyMap(lintrinsics, ldistortion, lR, lP, lmapx, lmapy)
1501 cv.InitUndistortRectifyMap(rintrinsics, rdistortion, rR, rP, rmapx, rmapy)
1503 for l,r in zip(leftimages, rightimages)[:1]:
1506 cv.Remap(l, l_, lmapx, lmapy)
1507 cv.Remap(r, r_, rmapx, rmapy)
1508 # cv.ShowImage("snap", l_)
1512 def xxx_test_Disparity(self):
1514 for t in ["8U", "8S", "16U", "16S", "32S", "32F", "64F" ]:
1516 nm = "%sC%d" % (t, c)
1517 print "int32 CV_%s=%d" % (nm, eval("cv.CV_%s" % nm))
1519 integral = cv.CreateImage((641,481), cv.IPL_DEPTH_32S, 1)
1520 L = cv.LoadImage("f0-left.png", 0)
1521 R = cv.LoadImage("f0-right.png", 0)
1522 d = cv.CreateImage(cv.GetSize(L), cv.IPL_DEPTH_8U, 1)
1523 Rn = cv.CreateImage(cv.GetSize(L), cv.IPL_DEPTH_8U, 1)
1524 started = time.time()
1525 for i in range(100):
1527 cv.Integral(d, integral)
1528 cv.SetImageROI(R, (1, 1, 639, 479))
1529 cv.SetImageROI(Rn, (0, 0, 639, 479))
1533 print 1e3 * (time.time() - started) / 100, "ms"
1536 def local_test_lk(self):
1537 seq = [cv.LoadImage("track/%06d.png" % i, 0) for i in range(40)]
1538 crit = (cv.CV_TERMCRIT_ITER, 100, 0.1)
1539 crit = (cv.CV_TERMCRIT_EPS, 0, 0.001)
1541 for i in range(1,40):
1542 r = cv.CalcOpticalFlowPyrLK(seq[0], seq[i], None, None, [(32,32)], (7,7), 0, crit, 0)
1546 a = cv.CreateImage((1024,1024), 8, 1)
1547 b = cv.CreateImage((1024,1024), 8, 1)
1548 cv.Resize(seq[0], a, cv.CV_INTER_NN)
1549 cv.Resize(seq[i], b, cv.CV_INTER_NN)
1550 cv.Line(a, (0, 512), (1024, 512), 255)
1551 cv.Line(a, (512,0), (512,1024), 255)
1552 x,y = [int(c) for c in pos]
1553 cv.Line(b, (0, y*16), (1024, y*16), 255)
1554 cv.Line(b, (x*16,0), (x*16,1024), 255)
1559 def local_test_Haar(self):
1561 hcfile = os.environ['OPENCV_ROOT'] + '/share/opencv/haarcascades/haarcascade_frontalface_default.xml'
1562 hc = cv.Load(hcfile)
1563 img = cv.LoadImage('Stu.jpg', 0)
1564 faces = cv.HaarDetectObjects(img, hc, cv.CreateMemStorage())
1565 self.assert_(len(faces) > 0)
1566 for (x,y,w,h),n in faces:
1567 cv.Rectangle(img, (x,y), (x+w,y+h), 255)
1570 def test_create(self):
1571 """ CvCreateImage, CvCreateMat and the header-only form """
1572 for (w,h) in [ (320,400), (640,480), (1024, 768) ]:
1573 data = "z" * (w * h)
1575 im = cv.CreateImage((w,h), 8, 1)
1576 cv.SetData(im, data, w)
1577 im2 = cv.CreateImageHeader((w,h), 8, 1)
1578 cv.SetData(im2, data, w)
1579 self.assertSame(im, im2)
1581 m = cv.CreateMat(h, w, cv.CV_8UC1)
1582 cv.SetData(m, data, w)
1583 m2 = cv.CreateMatHeader(h, w, cv.CV_8UC1)
1584 cv.SetData(m2, data, w)
1585 self.assertSame(m, m2)
1587 self.assertSame(im, m)
1588 self.assertSame(im2, m2)
1591 def test_casts(self):
1592 im = cv.GetImage(self.get_sample("samples/c/lena.jpg", 0))
1593 data = im.tostring()
1594 cv.SetData(im, data, cv.GetSize(im)[0])
1596 start_count = sys.getrefcount(data)
1598 # Conversions should produce same data
1599 self.assertSame(im, cv.GetImage(im))
1601 self.assertSame(im, m)
1602 self.assertSame(m, cv.GetImage(m))
1603 im2 = cv.GetImage(m)
1604 self.assertSame(im, im2)
1606 self.assertEqual(sys.getrefcount(data), start_count + 2)
1608 self.assertEqual(sys.getrefcount(data), start_count + 1)
1610 self.assertEqual(sys.getrefcount(data), start_count)
1612 self.assertEqual(sys.getrefcount(data), start_count - 1)
1614 def test_morphological(self):
1615 im = cv.CreateImage((128, 128), cv.IPL_DEPTH_8U, 1)
1616 cv.Resize(cv.GetImage(self.get_sample("samples/c/lena.jpg", 0)), im)
1617 dst = cv.CloneImage(im)
1618 shapes = [eval("cv.CV_SHAPE_%s" % s) for s in ['RECT', 'CROSS', 'ELLIPSE']]
1619 elements = [cv.CreateStructuringElementEx(sz, sz, sz / 2 + 1, sz / 2 + 1, shape) for sz in [3, 4, 7, 20] for shape in shapes]
1620 elements += [cv.CreateStructuringElementEx(7, 7, 3, 3, cv.CV_SHAPE_CUSTOM, [1] * 49)]
1623 cv.Dilate(im, dst, e, iter)
1624 cv.Erode(im, dst, e, iter)
1625 temp = cv.CloneImage(im)
1626 for op in ["OPEN", "CLOSE", "GRADIENT", "TOPHAT", "BLACKHAT"]:
1627 cv.MorphologyEx(im, dst, temp, e, eval("cv.CV_MOP_%s" % op), iter)
1629 def failing_test_getmat_nd(self):
1630 # 1D CvMatND should yield 1D CvMat
1631 matnd = cv.CreateMatND([13], cv.CV_8UC1)
1632 self.assertEqual(cv.GetDims(cv.GetMat(matnd, allowND = True)), (13,))
1634 # 2D CvMatND should yield 2D CvMat
1635 matnd = cv.CreateMatND([11,12], cv.CV_8UC1)
1636 self.assertEqual(cv.GetDims(cv.GetMat(matnd, allowND = True)), (11, 12))
1638 # 3D CvMatND should yield 1D CvMat
1639 matnd = cv.CreateMatND([8,8,8], cv.CV_8UC1)
1640 self.assertEqual(cv.GetDims(cv.GetMat(matnd, allowND = True)), (8 * 8 * 8,))
1642 def test_clipline(self):
1643 self.assert_(cv.ClipLine((100,100), (-100,0), (500,0)) == ((0,0), (99,0)))
1644 self.assert_(cv.ClipLine((100,100), (-100,0), (-200,0)) == None)
1646 def test_smoke_image_processing(self):
1647 src = self.get_sample("samples/c/lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
1648 #dst = cv.CloneImage(src)
1649 for aperture_size in [1, 3, 5, 7]:
1650 dst_16s = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_16S, 1)
1651 dst_32f = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_32F, 1)
1653 cv.Sobel(src, dst_16s, 1, 1, aperture_size)
1654 cv.Laplace(src, dst_16s, aperture_size)
1655 cv.PreCornerDetect(src, dst_32f)
1656 eigendst = cv.CreateImage((6*cv.GetSize(src)[0], cv.GetSize(src)[1]), cv.IPL_DEPTH_32F, 1)
1657 cv.CornerEigenValsAndVecs(src, eigendst, 8, aperture_size)
1658 cv.CornerMinEigenVal(src, dst_32f, 8, aperture_size)
1659 cv.CornerHarris(src, dst_32f, 8, aperture_size)
1660 cv.CornerHarris(src, dst_32f, 8, aperture_size, 0.1)
1664 def test_fitline(self):
1665 cv.FitLine([ (1,1), (10,10) ], cv.CV_DIST_L2, 0, 0.01, 0.01)
1666 cv.FitLine([ (1,1,1), (10,10,10) ], cv.CV_DIST_L2, 0, 0.01, 0.01)
1667 a = self.get_sample("samples/c/lena.jpg", 0)
1668 eig_image = cv.CreateImage(cv.GetSize(a), cv.IPL_DEPTH_32F, 1)
1669 temp_image = cv.CreateImage(cv.GetSize(a), cv.IPL_DEPTH_32F, 1)
1670 pts = cv.GoodFeaturesToTrack(a, eig_image, temp_image, 100, 0.04, 2, use_harris=1)
1671 hull = cv.ConvexHull2(pts, cv.CreateMemStorage(), return_points = 1)
1672 cv.FitLine(hull, cv.CV_DIST_L2, 0, 0.01, 0.01)
1674 def test_moments(self):
1675 im = self.get_sample("samples/c/lena.jpg", 0)
1678 for x_order in range(4):
1679 for y_order in range(4 - x_order):
1680 orders.append((x_order, y_order))
1682 # Just a smoke test for these three functions
1683 [ cv.GetSpatialMoment(mo, xo, yo) for (xo,yo) in orders ]
1684 [ cv.GetCentralMoment(mo, xo, yo) for (xo,yo) in orders ]
1685 [ cv.GetNormalizedCentralMoment(mo, xo, yo) for (xo,yo) in orders ]
1687 # Hu Moments we can do slightly better. Check that the first
1688 # six are invariant wrt image reflection, and that the 7th
1691 hu0 = cv.GetHuMoments(cv.Moments(im))
1693 hu1 = cv.GetHuMoments(cv.Moments(im))
1694 self.assert_(len(hu0) == 7)
1695 self.assert_(len(hu1) == 7)
1697 self.assert_(abs(hu0[i] - hu1[i]) < 1e-6)
1698 self.assert_(abs(hu0[i] + hu1[i]) < 1e-6)
1700 def test_encode(self):
1701 im = self.get_sample("samples/c/lena.jpg", 1)
1702 jpeg = cv.EncodeImage(".jpeg", im)
1704 # Smoke jpeg compression at various qualities
1705 sizes = dict([(qual, cv.EncodeImage(".jpeg", im, [cv.CV_IMWRITE_JPEG_QUALITY, qual]).cols) for qual in range(5, 100, 5)])
1707 # Check that the default QUALITY is 95
1708 self.assertEqual(cv.EncodeImage(".jpeg", im).cols, sizes[95])
1710 # Check that the 'round-trip' gives an image of the same size
1711 round_trip = cv.DecodeImage(cv.EncodeImage(".jpeg", im, [cv.CV_IMWRITE_JPEG_QUALITY, 10]))
1712 self.assert_(cv.GetSize(round_trip) == cv.GetSize(im))
1714 def test_reduce(self):
1715 srcmat = cv.CreateMat(2, 3, cv.CV_32FC1)
1724 def doreduce(siz, rfunc):
1725 dst = cv.CreateMat(siz[0], siz[1], cv.CV_32FC1)
1728 return [dst[i,0] for i in range(siz[0])]
1730 return [dst[0,i] for i in range(siz[1])]
1733 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst)), [3, 5, 7])
1734 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst, -1)), [3, 5, 7])
1735 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst, 0)), [3, 5, 7])
1736 self.assertEqual(doreduce((2,1), lambda dst: cv.Reduce(srcmat, dst, 1)), [3, 12])
1739 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst, op = cv.CV_REDUCE_SUM)), [3, 5, 7])
1740 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst, op = cv.CV_REDUCE_AVG)), [1.5, 2.5, 3.5])
1741 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst, op = cv.CV_REDUCE_MAX)), [3, 4, 5])
1742 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst, op = cv.CV_REDUCE_MIN)), [0, 1, 2])
1744 # exercise both dim and op
1745 self.assertEqual(doreduce((1,3), lambda dst: cv.Reduce(srcmat, dst, 0, cv.CV_REDUCE_MAX)), [3, 4, 5])
1746 self.assertEqual(doreduce((2,1), lambda dst: cv.Reduce(srcmat, dst, 1, cv.CV_REDUCE_MAX)), [2, 5])
1748 def test_operations(self):
1751 def __init__(self, data = None):
1752 self.m = cv.CreateMat(1, 32, cv.CV_32FC1)
1754 cv.SetData(self.m, array.array('f', data), 128)
1756 def __add__(self, other):
1758 if isinstance(other, Im):
1759 cv.Add(self.m, other.m, r.m)
1761 cv.AddS(self.m, (other,), r.m)
1764 def __sub__(self, other):
1766 if isinstance(other, Im):
1767 cv.Sub(self.m, other.m, r.m)
1769 cv.SubS(self.m, (other,), r.m)
1772 def __rsub__(self, other):
1774 cv.SubRS(self.m, (other,), r.m)
1777 def __mul__(self, other):
1779 if isinstance(other, Im):
1780 cv.Mul(self.m, other.m, r.m)
1782 cv.ConvertScale(self.m, r.m, other)
1785 def __rmul__(self, other):
1787 cv.ConvertScale(self.m, r.m, other)
1790 def __div__(self, other):
1792 if isinstance(other, Im):
1793 cv.Div(self.m, other.m, r.m)
1795 cv.ConvertScale(self.m, r.m, 1.0 / other)
1798 def __pow__(self, other):
1800 cv.Pow(self.m, r.m, other)
1808 def __getitem__(self, i):
1814 expected = op(a[i], b[i])
1815 self.assertAlmostEqual(expected, r[i], 4)
1817 a = Im([random.randrange(1, 256) for i in range(32)])
1818 b = Im([random.randrange(1, 256) for i in range(32)])
1820 # simple operations first
1821 verify(lambda x, y: x + y)
1822 verify(lambda x, y: x + 3)
1823 verify(lambda x, y: x + 0)
1824 verify(lambda x, y: x + -8)
1826 verify(lambda x, y: x - y)
1827 verify(lambda x, y: x - 1)
1828 verify(lambda x, y: 1 - x)
1830 verify(lambda x, y: abs(x))
1832 verify(lambda x, y: x * y)
1833 verify(lambda x, y: x * 3)
1835 verify(lambda x, y: x / y)
1836 verify(lambda x, y: x / 2)
1838 for p in [-2, -1, -0.5, -0.1, 0, 0.1, 0.5, 1, 2 ]:
1839 verify(lambda x, y: (x ** p) + (y ** p))
1842 verify(lambda x, y: x - 4 * abs(y))
1843 verify(lambda x, y: abs(y) / x)
1846 verify(lambda x, y: 2 * x + 3 * (y ** 0.5))
1848 def temp_test(self):
1851 def failing_test_rand_GetStarKeypoints(self):
1852 # GetStarKeypoints [<cvmat(type=4242400d rows=64 cols=64 step=512 )>, <cv.cvmemstorage object at 0xb7cc40d0>, (45, 0.73705234376883488, 0.64282591451367344, 0.1567738743689836, 3)]
1853 print cv.CV_MAT_CN(0x4242400d)
1854 mat = cv.CreateMat( 64, 64, cv.CV_32FC2)
1855 cv.GetStarKeypoints(mat, cv.CreateMemStorage(), (45, 0.73705234376883488, 0.64282591451367344, 0.1567738743689836, 3))
1858 def test_rand_PutText(self):
1859 """ Test for bug 2829336 """
1860 mat = cv.CreateMat( 64, 64, cv.CV_8UC1)
1861 font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1)
1862 cv.PutText(mat, chr(127), (20, 20), font, 255)
1864 def failing_test_rand_FindNearestPoint2D(self):
1865 subdiv = cv.CreateSubdivDelaunay2D((0,0,100,100), cv.CreateMemStorage())
1866 cv.SubdivDelaunay2DInsert( subdiv, (50, 50))
1867 cv.CalcSubdivVoronoi2D(subdiv)
1869 for e in subdiv.edges:
1871 print " ", cv.Subdiv2DEdgeOrg(e)
1872 print " ", cv.Subdiv2DEdgeOrg(cv.Subdiv2DRotateEdge(e, 1)), cv.Subdiv2DEdgeDst(cv.Subdiv2DRotateEdge(e, 1))
1873 print "nearest", cv.FindNearestPoint2D(subdiv, (1.0, 1.0))
1875 class NewTests(OpenCVTests):
1879 if __name__ == '__main__':
1881 optlist, args = getopt.getopt(sys.argv[1:], 'l:r')
1890 cases = [PreliminaryTests, FunctionTests, AreaTests]
1891 everything = [(tc, t) for tc in cases for t in unittest.TestLoader().getTestCaseNames(tc) ]
1893 # cases = [NewTests]
1896 args = [(tc, t) for (tc, t) in everything if t in args]
1898 suite = unittest.TestSuite()
1899 for l in range(loops):
1901 random.shuffle(args)
1903 suite.addTest(tc(t))
1904 unittest.TextTestRunner(verbosity=2).run(suite)