ruby-opencv/test/test_pointset.rb

129 lines
3.3 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# -*- mode: ruby; coding: utf-8 -*-
require 'test/unit'
require 'opencv'
require File.expand_path(File.dirname(__FILE__)) + '/helper'
include OpenCV
# Tests for OpenCV::PointSet
class TestPointSet < OpenCVTestCase
def setup
mat0 = create_cvmat(128, 128, :cv8u, 1) { |j, i|
(j - 64) ** 2 + (i - 64) ** 2 <= (32 ** 2) ? CvColor::White : CvColor::Black
}
@contour1 = mat0.find_contours
@contour2 = CvContour.new
end
def test_contour_area
assert_equal(3118, @contour1.contour_area.to_i)
s = CvSlice.new(0, @contour1.size / 2)
assert_equal(1527, @contour1.contour_area(s).to_i)
assert_raise(TypeError) {
@contour1.contour_area(DUMMY_OBJ)
}
assert_raise(CvStsBadArg) {
@contour2.contour_area
}
end
def test_fit_ellipse2
box = @contour1.fit_ellipse2
center = box.center
assert_equal(64, center.x.to_i)
assert_equal(64, center.y.to_i)
size = box.size
assert_in_delta(63, size.width, 1.0)
assert_in_delta(63, size.height, 1.0)
angle = [box.angle, 180 - box.angle].min
assert_in_delta(0, angle, 0.1)
assert_raise(CvStsBadSize) {
@contour2.fit_ellipse2
}
end
def test_convex_hull2
[@contour1.convex_hull2, @contour1.convex_hull2(true)].each { |hull|
assert_equal(36, hull.size)
assert_equal(CvContour, hull.class)
assert_equal(CvPoint, hull[0].class)
assert_equal(32, hull[0].x)
assert_equal(64, hull[0].y)
}
hull = @contour1.convex_hull2(false)
assert_equal(36, hull.size)
assert_equal(CvContour, hull.class)
assert_equal(CvPoint, hull[0].class)
assert_equal(96, hull[0].x)
assert_equal(64, hull[0].y)
@contour1.convex_hull2(DUMMY_OBJ)
end
def test_check_contour_convexity
assert_false(@contour1.check_contour_convexity)
end
def test_convexity_defects
hull = @contour1.convex_hull2(true, false)
defects = @contour1.convexity_defects(hull)
assert_equal(CvSeq, defects.class)
assert_equal(CvConvexityDefect, defects[0].class)
assert_equal(32, defects.size)
d = defects[0]
assert_equal(33, d.start.x)
assert_equal(57, d.start.y)
assert_equal(33, d.depth_point.x)
assert_equal(63, d.depth_point.y)
assert_equal(32, d.end.x)
assert_equal(64, d.end.y)
assert_in_delta(0.8485, d.depth, 0.001)
assert_raise(TypeError) {
@contour1.convexity_defects(DUMMY_OBJ)
}
end
def test_min_area_rect2
box = @contour1.min_area_rect2
assert_equal(CvBox2D, box.class)
center = box.center
assert_equal(64, center.x.to_i)
assert_equal(64, center.y.to_i)
size = box.size
assert_in_delta(63.356, size.width, 0.001)
assert_in_delta(63.356, size.height, 0.001)
assert_in_delta(-81.30, box.angle, 1.0)
flunk('FIXME: Currently PointSet#min_area_rect2 causes segmentation fault when "self" is invalid.')
assert_raise(CvStsBadSize) {
@contour2.min_area_rect2
}
end
def test_min_enclosing_circle
circle = @contour1.min_enclosing_circle
assert_equal(CvCircle32f, circle.class)
center = circle.center
assert_equal(64, center.x.to_i)
assert_equal(64, center.y.to_i)
assert_in_delta(32.959, circle.radius, 0.001)
assert_raise(CvStsBadSize) {
@contour2.min_enclosing_circle
}
end
end