Newer
Older
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import pytest
from line_image_extractor.image_utils import determine_rotate_angle
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
@pytest.mark.parametrize(
"angle, expected_rotate_angle",
(
(-1, -1),
(0, 0),
(10, 10),
(44.9, 45),
(45.1, -45),
(45, 0),
(46, -44),
(50, -40),
(89, -1),
(90, 0),
(91, 1),
(134, 44),
(135, 0),
(136, -44),
(179, -1),
(180, 0),
(-180, 0),
(-179, 1),
(-91, -1),
(-90, 0),
(-46, 44),
(-45, 0),
(-44, -44),
),
)
def test_determine_rotate_angle(angle, expected_rotate_angle):
top_left = [300, 300]
shape = [400, 100]
# create polygon with expected angle
box = cv2.boxPoints((top_left, shape, angle))
box = np.int0(box)
_, _, calc_angle = cv2.minAreaRect(box)
rotate_angle = determine_rotate_angle(box)
assert (
round(rotate_angle) == expected_rotate_angle
), f"C, A, R: {calc_angle} === {angle} === {rotate_angle}"