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
406392e1
Commit
406392e1
authored
Feb 15, 2019
by
smirnov-alexey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Introduces yuv420p(nv12) to rgb and bgr color conversion
parent
54a1bbe1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
160 additions
and
0 deletions
+160
-0
imgproc.hpp
modules/gapi/include/opencv2/gapi/imgproc.hpp
+58
-0
kernels_imgproc.cpp
modules/gapi/src/api/kernels_imgproc.cpp
+10
-0
gcpuimgproc.cpp
modules/gapi/src/backends/cpu/gcpuimgproc.cpp
+18
-0
gapi_imgproc_tests.hpp
modules/gapi/test/common/gapi_imgproc_tests.hpp
+2
-0
gapi_imgproc_tests_inl.hpp
modules/gapi/test/common/gapi_imgproc_tests_inl.hpp
+60
-0
gapi_imgproc_tests_cpu.cpp
modules/gapi/test/cpu/gapi_imgproc_tests_cpu.cpp
+12
-0
No files found.
modules/gapi/include/opencv2/gapi/imgproc.hpp
View file @
406392e1
...
...
@@ -114,6 +114,34 @@ namespace imgproc {
}
};
G_TYPED_KERNEL
(
GNV12toRGB
,
<
GMat
(
GMat
,
GMat
)
>
,
"org.opencv.imgproc.colorconvert.nv12torgb"
)
{
static
GMatDesc
outMeta
(
GMatDesc
in_y
,
GMatDesc
in_uv
)
{
GAPI_Assert
(
in_y
.
chan
==
1
);
GAPI_Assert
(
in_uv
.
chan
==
2
);
GAPI_Assert
(
in_y
.
depth
==
CV_8U
);
GAPI_Assert
(
in_uv
.
depth
==
CV_8U
);
GAPI_Assert
(
in_uv
.
size
.
width
%
2
==
0
);
GAPI_Assert
(
in_uv
.
size
.
height
%
2
==
0
);
GAPI_Assert
(
in_y
.
size
.
width
==
2
*
in_uv
.
size
.
width
);
GAPI_Assert
(
in_y
.
size
.
height
==
2
*
in_uv
.
size
.
height
);
return
in_y
.
withType
(
CV_8U
,
3
);
// type will be CV_8UC3;
}
};
G_TYPED_KERNEL
(
GNV12toBGR
,
<
GMat
(
GMat
,
GMat
)
>
,
"org.opencv.imgproc.colorconvert.nv12tobgr"
)
{
static
GMatDesc
outMeta
(
GMatDesc
in_y
,
GMatDesc
in_uv
)
{
GAPI_Assert
(
in_y
.
chan
==
1
);
GAPI_Assert
(
in_uv
.
chan
==
2
);
GAPI_Assert
(
in_y
.
depth
==
CV_8U
);
GAPI_Assert
(
in_uv
.
depth
==
CV_8U
);
GAPI_Assert
(
in_uv
.
size
.
width
%
2
==
0
);
GAPI_Assert
(
in_uv
.
size
.
height
%
2
==
0
);
GAPI_Assert
(
in_y
.
size
.
width
==
2
*
in_uv
.
size
.
width
);
GAPI_Assert
(
in_y
.
size
.
height
==
2
*
in_uv
.
size
.
height
);
return
in_y
.
withType
(
CV_8U
,
3
);
// type will be CV_8UC3;
}
};
G_TYPED_KERNEL
(
GRGB2Lab
,
<
GMat
(
GMat
)
>
,
"org.opencv.imgproc.colorconvert.rgb2lab"
)
{
static
GMatDesc
outMeta
(
GMatDesc
in
)
{
return
in
;
// type still remains CV_8UC3;
...
...
@@ -728,6 +756,36 @@ Output image must be 8-bit unsigned 3-channel image @ref CV_8UC3.
@sa RGB2Lab, RGB2YUV
*/
GAPI_EXPORTS
GMat
YUV2RGB
(
const
GMat
&
src
);
/** @brief Converts an image from NV12 (YUV420p) color space to RGB.
The function converts an input image from NV12 color space to RGB.
The conventional ranges for Y, U, and V channel values are 0 to 255.
Output image must be 8-bit unsigned 3-channel image @ref CV_8UC3.
@note Function textual ID is "org.opencv.imgproc.colorconvert.nv12torgb"
@param src_y input image: 8-bit unsigned 1-channel image @ref CV_8UC1.
@param src_uv input image: 8-bit unsigned 2-channel image @ref CV_8UC2.
@sa YUV2RGB, NV12toBGR
*/
GAPI_EXPORTS
GMat
NV12toRGB
(
const
GMat
&
src_y
,
const
GMat
&
src_uv
);
/** @brief Converts an image from NV12 (YUV420p) color space to BGR.
The function converts an input image from NV12 color space to RGB.
The conventional ranges for Y, U, and V channel values are 0 to 255.
Output image must be 8-bit unsigned 3-channel image @ref CV_8UC3.
@note Function textual ID is "org.opencv.imgproc.colorconvert.nv12tobgr"
@param src_y input image: 8-bit unsigned 1-channel image @ref CV_8UC1.
@param src_uv input image: 8-bit unsigned 2-channel image @ref CV_8UC2.
@sa YUV2BGR, NV12toRGB
*/
GAPI_EXPORTS
GMat
NV12toBGR
(
const
GMat
&
src_y
,
const
GMat
&
src_uv
);
//! @} gapi_colorconvert
}
//namespace gapi
}
//namespace cv
...
...
modules/gapi/src/api/kernels_imgproc.cpp
View file @
406392e1
...
...
@@ -142,6 +142,16 @@ GMat YUV2RGB(const GMat& src)
return
imgproc
::
GYUV2RGB
::
on
(
src
);
}
GMat
NV12toRGB
(
const
GMat
&
src_y
,
const
GMat
&
src_uv
)
{
return
imgproc
::
GNV12toRGB
::
on
(
src_y
,
src_uv
);
}
GMat
NV12toBGR
(
const
GMat
&
src_y
,
const
GMat
&
src_uv
)
{
return
imgproc
::
GNV12toBGR
::
on
(
src_y
,
src_uv
);
}
GMat
RGB2Lab
(
const
GMat
&
src
)
{
return
imgproc
::
GRGB2Lab
::
on
(
src
);
...
...
modules/gapi/src/backends/cpu/gcpuimgproc.cpp
View file @
406392e1
...
...
@@ -194,6 +194,22 @@ GAPI_OCV_KERNEL(GCPUYUV2RGB, cv::gapi::imgproc::GYUV2RGB)
}
};
GAPI_OCV_KERNEL
(
GCPUNV12toRGB
,
cv
::
gapi
::
imgproc
::
GNV12toRGB
)
{
static
void
run
(
const
cv
::
Mat
&
in_y
,
const
cv
::
Mat
&
in_uv
,
cv
::
Mat
&
out
)
{
cv
::
cvtColorTwoPlane
(
in_y
,
in_uv
,
out
,
cv
::
COLOR_YUV2RGB_NV12
);
}
};
GAPI_OCV_KERNEL
(
GCPUNV12toBGR
,
cv
::
gapi
::
imgproc
::
GNV12toBGR
)
{
static
void
run
(
const
cv
::
Mat
&
in_y
,
const
cv
::
Mat
&
in_uv
,
cv
::
Mat
&
out
)
{
cv
::
cvtColorTwoPlane
(
in_y
,
in_uv
,
out
,
cv
::
COLOR_YUV2BGR_NV12
);
}
};
GAPI_OCV_KERNEL
(
GCPURGB2Lab
,
cv
::
gapi
::
imgproc
::
GRGB2Lab
)
{
static
void
run
(
const
cv
::
Mat
&
in
,
cv
::
Mat
&
out
)
...
...
@@ -277,6 +293,8 @@ cv::gapi::GKernelPackage cv::gapi::imgproc::cpu::kernels()
,
GCPUEqualizeHist
,
GCPURGB2YUV
,
GCPUYUV2RGB
,
GCPUNV12toRGB
,
GCPUNV12toBGR
,
GCPURGB2Lab
,
GCPUBGR2LUV
,
GCPUBGR2YUV
...
...
modules/gapi/test/common/gapi_imgproc_tests.hpp
View file @
406392e1
...
...
@@ -33,6 +33,8 @@ struct RGB2GrayTest : public TestParams<std::tuple<compare_f,cv::Size,bool,cv::
struct
BGR2GrayTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
bool
,
cv
::
GCompileArgs
>>
{};
struct
RGB2YUVTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
bool
,
cv
::
GCompileArgs
>>
{};
struct
YUV2RGBTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
bool
,
cv
::
GCompileArgs
>>
{};
struct
NV12toRGBTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
cv
::
GCompileArgs
>>
{};
struct
NV12toBGRTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
cv
::
GCompileArgs
>>
{};
struct
RGB2LabTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
bool
,
cv
::
GCompileArgs
>>
{};
struct
BGR2LUVTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
bool
,
cv
::
GCompileArgs
>>
{};
struct
LUV2BGRTest
:
public
TestParams
<
std
::
tuple
<
compare_f
,
cv
::
Size
,
bool
,
cv
::
GCompileArgs
>>
{};
...
...
modules/gapi/test/common/gapi_imgproc_tests_inl.hpp
View file @
406392e1
...
...
@@ -548,6 +548,66 @@ TEST_P(YUV2RGBTest, AccuracyTest)
}
}
TEST_P
(
NV12toRGBTest
,
AccuracyTest
)
{
compare_f
cmpF
;
cv
::
Size
sz
;
cv
::
GCompileArgs
compile_args
;
std
::
tie
(
cmpF
,
sz
,
compile_args
)
=
GetParam
();
initMatsRandN
(
CV_8UC1
,
sz
,
CV_8UC3
);
// G-API code //////////////////////////////////////////////////////////////
cv
::
GMat
in_y
;
cv
::
GMat
in_uv
;
auto
out
=
cv
::
gapi
::
NV12toRGB
(
in_y
,
in_uv
);
// Additional mat for uv
cv
::
Mat
in_mat_uv
(
cv
::
Size
(
sz
.
width
/
2
,
sz
.
height
/
2
),
CV_8UC2
);
cv
::
GComputation
c
(
cv
::
GIn
(
in_y
,
in_uv
),
cv
::
GOut
(
out
));
c
.
apply
(
cv
::
gin
(
in_mat1
,
in_mat_uv
),
cv
::
gout
(
out_mat_gapi
),
std
::
move
(
compile_args
));
// OpenCV code /////////////////////////////////////////////////////////////
{
cv
::
cvtColorTwoPlane
(
in_mat1
,
in_mat_uv
,
out_mat_ocv
,
cv
::
COLOR_YUV2RGB_NV12
);
}
// Comparison //////////////////////////////////////////////////////////////
{
EXPECT_TRUE
(
cmpF
(
out_mat_gapi
,
out_mat_ocv
));
EXPECT_EQ
(
out_mat_gapi
.
size
(),
sz
);
}
}
TEST_P
(
NV12toBGRTest
,
AccuracyTest
)
{
compare_f
cmpF
;
cv
::
Size
sz
;
cv
::
GCompileArgs
compile_args
;
std
::
tie
(
cmpF
,
sz
,
compile_args
)
=
GetParam
();
initMatsRandN
(
CV_8UC1
,
sz
,
CV_8UC3
);
// G-API code //////////////////////////////////////////////////////////////
cv
::
GMat
in_y
;
cv
::
GMat
in_uv
;
auto
out
=
cv
::
gapi
::
NV12toBGR
(
in_y
,
in_uv
);
// Additional mat for uv
cv
::
Mat
in_mat_uv
(
cv
::
Size
(
sz
.
width
/
2
,
sz
.
height
/
2
),
CV_8UC2
);
cv
::
GComputation
c
(
cv
::
GIn
(
in_y
,
in_uv
),
cv
::
GOut
(
out
));
c
.
apply
(
cv
::
gin
(
in_mat1
,
in_mat_uv
),
cv
::
gout
(
out_mat_gapi
),
std
::
move
(
compile_args
));
// OpenCV code /////////////////////////////////////////////////////////////
{
cv
::
cvtColorTwoPlane
(
in_mat1
,
in_mat_uv
,
out_mat_ocv
,
cv
::
COLOR_YUV2BGR_NV12
);
}
// Comparison //////////////////////////////////////////////////////////////
{
EXPECT_TRUE
(
cmpF
(
out_mat_gapi
,
out_mat_ocv
));
EXPECT_EQ
(
out_mat_gapi
.
size
(),
sz
);
}
}
TEST_P
(
RGB2LabTest
,
AccuracyTest
)
{
auto
param
=
GetParam
();
...
...
modules/gapi/test/cpu/gapi_imgproc_tests_cpu.cpp
View file @
406392e1
...
...
@@ -224,6 +224,18 @@ INSTANTIATE_TEST_CASE_P(YUV2RGBTestCPU, YUV2RGBTest,
/*init output matrices or not*/
testing
::
Bool
(),
Values
(
cv
::
compile_args
(
IMGPROC_CPU
))));
INSTANTIATE_TEST_CASE_P
(
NV12toRGBTestCPU
,
NV12toRGBTest
,
Combine
(
Values
(
AbsExact
().
to_compare_f
()),
Values
(
cv
::
Size
(
1280
,
720
),
cv
::
Size
(
640
,
480
)),
Values
(
cv
::
compile_args
(
IMGPROC_CPU
))));
INSTANTIATE_TEST_CASE_P
(
NV12toBGRTestCPU
,
NV12toBGRTest
,
Combine
(
Values
(
AbsExact
().
to_compare_f
()),
Values
(
cv
::
Size
(
1280
,
720
),
cv
::
Size
(
640
,
480
)),
Values
(
cv
::
compile_args
(
IMGPROC_CPU
))));
INSTANTIATE_TEST_CASE_P
(
RGB2LabTestCPU
,
RGB2LabTest
,
Combine
(
Values
(
AbsExact
().
to_compare_f
()),
Values
(
cv
::
Size
(
1280
,
720
),
...
...
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