Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
2358c79d
Commit
2358c79d
authored
Apr 16, 2015
by
Ahmatnurov Dinar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move 3265 to 3.0;
parent
81c5d580
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
129 additions
and
5 deletions
+129
-5
test_drawing.cpp
modules/imgcodecs/test/test_drawing.cpp
+78
-0
drawing.cpp
modules/imgproc/src/drawing.cpp
+51
-5
No files found.
modules/imgcodecs/test/test_drawing.cpp
View file @
2358c79d
...
...
@@ -448,3 +448,81 @@ protected:
};
TEST
(
Imgcodecs_Drawing
,
fillconvexpoly_clipping
)
{
CV_FillConvexPolyTest
test
;
test
.
safe_run
();
}
class
CV_DrawingTest_UTF8
:
public
cvtest
::
BaseTest
{
public
:
CV_DrawingTest_UTF8
()
{}
~
CV_DrawingTest_UTF8
()
{}
protected
:
void
run
(
int
)
{
vector
<
string
>
lines
;
lines
.
push_back
(
"abcdefghijklmnopqrstuvwxyz1234567890"
);
// cyrillic letters small
lines
.
push_back
(
"
\xD0\xB0\xD0\xB1\xD0\xB2\xD0\xB3\xD0\xB4\xD0\xB5\xD1\x91\xD0\xB6\xD0\xB7
"
"
\xD0\xB8\xD0\xB9\xD0\xBA\xD0\xBB\xD0\xBC\xD0\xBD\xD0\xBE\xD0\xBF\xD1\x80
"
"
\xD1\x81\xD1\x82\xD1\x83\xD1\x84\xD1\x85\xD1\x86\xD1\x87\xD1\x88\xD1\x89
"
"
\xD1\x8A\xD1\x8B\xD1\x8C\xD1\x8D\xD1\x8E\xD1\x8F
"
);
// cyrillic letters capital
lines
.
push_back
(
"
\xD0\x90\xD0\x91\xD0\x92\xD0\x93\xD0\x94\xD0\x95\xD0\x81\xD0\x96\xD0\x97
"
"
\xD0\x98\xD0\x99\xD0\x9A\xD0\x9B\xD0\x9C\xD0\x9D\xD0\x9E\xD0\x9F\xD0\xA0
"
"
\xD0\xA1\xD0\xA2\xD0\xA3\xD0\xA4\xD0\xA5\xD0\xA6\xD0\xA7\xD0\xA8\xD0\xA9
"
"
\xD0\xAA\xD0\xAB\xD0\xAC\xD0\xAD\xD0\xAE\xD0\xAF
"
);
// bounds
lines
.
push_back
(
"-
\xD0\x80
-
\xD0\x8E
-
\xD0\x8F
-"
);
lines
.
push_back
(
"-
\xD1\x90
-
\xD1\x91
-
\xD1\xBF
-"
);
// bad utf8
lines
.
push_back
(
"-
\x81
-
\x82
-
\x83
-"
);
lines
.
push_back
(
"--
\xF0
--"
);
lines
.
push_back
(
"-
\xF0
"
);
vector
<
int
>
fonts
;
fonts
.
push_back
(
FONT_HERSHEY_SIMPLEX
);
fonts
.
push_back
(
FONT_HERSHEY_PLAIN
);
fonts
.
push_back
(
FONT_HERSHEY_DUPLEX
);
fonts
.
push_back
(
FONT_HERSHEY_COMPLEX
);
fonts
.
push_back
(
FONT_HERSHEY_TRIPLEX
);
fonts
.
push_back
(
FONT_HERSHEY_COMPLEX_SMALL
);
fonts
.
push_back
(
FONT_HERSHEY_SCRIPT_SIMPLEX
);
fonts
.
push_back
(
FONT_HERSHEY_SCRIPT_COMPLEX
);
vector
<
Mat
>
results
;
Size
bigSize
(
0
,
0
);
for
(
vector
<
int
>::
const_iterator
font
=
fonts
.
begin
();
font
!=
fonts
.
end
();
++
font
)
{
for
(
int
italic
=
0
;
italic
<=
FONT_ITALIC
;
italic
+=
FONT_ITALIC
)
{
for
(
vector
<
string
>::
const_iterator
line
=
lines
.
begin
();
line
!=
lines
.
end
();
++
line
)
{
const
float
fontScale
=
1
;
const
int
thickness
=
1
;
const
Scalar
color
(
20
,
20
,
20
);
int
baseline
=
0
;
Size
textSize
=
getTextSize
(
*
line
,
*
font
|
italic
,
fontScale
,
thickness
,
&
baseline
);
Point
textOrg
(
0
,
textSize
.
height
+
2
);
Mat
img
(
textSize
+
Size
(
0
,
baseline
),
CV_8UC3
,
Scalar
(
255
,
255
,
255
));
putText
(
img
,
*
line
,
textOrg
,
*
font
|
italic
,
fontScale
,
color
,
thickness
,
CV_AA
);
results
.
push_back
(
img
);
bigSize
.
width
=
max
(
bigSize
.
width
,
img
.
size
().
width
);
bigSize
.
height
+=
img
.
size
().
height
+
1
;
}
}
}
int
shift
=
0
;
Mat
result
(
bigSize
,
CV_8UC3
,
Scalar
(
100
,
100
,
100
));
for
(
vector
<
Mat
>::
const_iterator
img
=
results
.
begin
();
img
!=
results
.
end
();
++
img
)
{
Rect
roi
(
Point
(
0
,
shift
),
img
->
size
());
Mat
sub
(
result
,
roi
);
img
->
copyTo
(
sub
);
shift
+=
img
->
size
().
height
+
1
;
}
imwrite
(
"/tmp/all_fonts.png"
,
result
);
}
};
TEST
(
Highgui_Drawing
,
utf8_support
)
{
CV_DrawingTest_UTF8
test
;
test
.
safe_run
();
}
modules/imgproc/src/drawing.cpp
View file @
2358c79d
...
...
@@ -1941,7 +1941,11 @@ static const int HersheyComplex[] = {
2014
,
2015
,
2016
,
2017
,
2018
,
2019
,
2020
,
2021
,
2022
,
2023
,
2024
,
2025
,
2026
,
2223
,
2084
,
2224
,
2247
,
587
,
2249
,
2101
,
2102
,
2103
,
2104
,
2105
,
2106
,
2107
,
2108
,
2109
,
2110
,
2111
,
2112
,
2113
,
2114
,
2115
,
2116
,
2117
,
2118
,
2119
,
2120
,
2121
,
2122
,
2123
,
2124
,
2125
,
2126
,
2225
,
2229
,
2226
,
2246
};
2225
,
2229
,
2226
,
2246
,
2801
,
2802
,
2803
,
2804
,
2805
,
2806
,
2807
,
2808
,
2809
,
2810
,
2811
,
2812
,
2813
,
2814
,
2815
,
2816
,
2817
,
2818
,
2819
,
2820
,
2821
,
2822
,
2823
,
2824
,
2825
,
2826
,
2827
,
2828
,
2829
,
2830
,
2831
,
2832
,
2901
,
2902
,
2903
,
2904
,
2905
,
2906
,
2907
,
2908
,
2909
,
2910
,
2911
,
2912
,
2913
,
2914
,
2915
,
2916
,
2917
,
2918
,
2919
,
2920
,
2921
,
2922
,
2923
,
2924
,
2925
,
2926
,
2927
,
2928
,
2929
,
2930
,
2931
,
2932
};
static
const
int
HersheyComplexItalic
[]
=
{
(
9
+
12
*
16
)
+
FONT_ITALIC_ALPHA
+
FONT_ITALIC_DIGIT
+
FONT_ITALIC_PUNCT
+
...
...
@@ -2033,6 +2037,50 @@ static const int* getFontData(int fontFace)
return
ascii
;
}
inline
void
readCheck
(
int
&
c
,
int
&
i
,
const
String
&
text
,
int
fontFace
)
{
int
leftBoundary
=
' '
,
rightBoundary
=
127
;
if
(
c
>=
0x80
&&
fontFace
==
FONT_HERSHEY_COMPLEX
)
{
if
(
c
==
0xD0
&&
(
uchar
)
text
[
i
+
1
]
>=
0x90
&&
(
uchar
)
text
[
i
+
1
]
<=
0xBF
)
{
c
=
(
uchar
)
text
[
++
i
]
-
17
;
leftBoundary
=
127
;
rightBoundary
=
175
;
}
else
if
(
c
==
0xD1
&&
(
uchar
)
text
[
i
+
1
]
>=
0x80
&&
(
uchar
)
text
[
i
+
1
]
<=
0x8F
)
{
c
=
(
uchar
)
text
[
++
i
]
+
47
;
leftBoundary
=
175
;
rightBoundary
=
191
;
}
else
{
if
(
c
>=
0xC0
&&
text
[
i
+
1
]
!=
0
)
//2 bytes utf
i
++
;
if
(
c
>=
0xE0
&&
text
[
i
+
1
]
!=
0
)
//3 bytes utf
i
++
;
if
(
c
>=
0xF0
&&
text
[
i
+
1
]
!=
0
)
//4 bytes utf
i
++
;
if
(
c
>=
0xF8
&&
text
[
i
+
1
]
!=
0
)
//5 bytes utf
i
++
;
if
(
c
>=
0xFC
&&
text
[
i
+
1
]
!=
0
)
//6 bytes utf
i
++
;
c
=
'?'
;
}
}
if
(
c
>=
rightBoundary
||
c
<
leftBoundary
)
c
=
'?'
;
}
extern
const
char
*
g_HersheyGlyphs
[];
void
putText
(
InputOutputArray
_img
,
const
String
&
text
,
Point
org
,
...
...
@@ -2066,8 +2114,7 @@ void putText( InputOutputArray _img, const String& text, Point org,
int
c
=
(
uchar
)
text
[
i
];
Point
p
;
if
(
c
>=
127
||
c
<
' '
)
c
=
'?'
;
readCheck
(
c
,
i
,
text
,
fontFace
);
const
char
*
ptr
=
faces
[
ascii
[(
c
-
' '
)
+
1
]];
p
.
x
=
(
uchar
)
ptr
[
0
]
-
'R'
;
...
...
@@ -2114,8 +2161,7 @@ Size getTextSize( const String& text, int fontFace, double fontScale, int thickn
int
c
=
(
uchar
)
text
[
i
];
Point
p
;
if
(
c
>=
127
||
c
<
' '
)
c
=
'?'
;
readCheck
(
c
,
i
,
text
,
fontFace
);
const
char
*
ptr
=
faces
[
ascii
[(
c
-
' '
)
+
1
]];
p
.
x
=
(
uchar
)
ptr
[
0
]
-
'R'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment