Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
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_contrib
Commits
ca7683ee
Commit
ca7683ee
authored
Aug 15, 2017
by
Vladislav Sovrasov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bioinspired: prevent zero output when OCL is enabled but Mat was passed as buffer instead of UMat
parent
8dc1920b
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
2 deletions
+14
-2
retina.cpp
modules/bioinspired/src/retina.cpp
+14
-2
No files found.
modules/bioinspired/src/retina.cpp
View file @
ca7683ee
...
@@ -293,6 +293,7 @@ private:
...
@@ -293,6 +293,7 @@ private:
bool
_convertCvMat2ValarrayBuffer
(
InputArray
inputMatToConvert
,
std
::
valarray
<
float
>
&
outputValarrayMatrix
);
bool
_convertCvMat2ValarrayBuffer
(
InputArray
inputMatToConvert
,
std
::
valarray
<
float
>
&
outputValarrayMatrix
);
bool
_wasOCLRunCalled
;
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
ocl
::
RetinaOCLImpl
*
_ocl_retina
;
ocl
::
RetinaOCLImpl
*
_ocl_retina
;
...
@@ -564,6 +565,7 @@ void RetinaImpl::setupIPLMagnoChannel(const bool normaliseOutput, const float pa
...
@@ -564,6 +565,7 @@ void RetinaImpl::setupIPLMagnoChannel(const bool normaliseOutput, const float pa
bool
RetinaImpl
::
ocl_run
(
InputArray
inputMatToConvert
)
bool
RetinaImpl
::
ocl_run
(
InputArray
inputMatToConvert
)
{
{
_ocl_retina
->
run
(
inputMatToConvert
);
_ocl_retina
->
run
(
inputMatToConvert
);
_wasOCLRunCalled
=
true
;
return
true
;
return
true
;
}
}
#endif
#endif
...
@@ -572,6 +574,7 @@ void RetinaImpl::run(InputArray inputMatToConvert)
...
@@ -572,6 +574,7 @@ void RetinaImpl::run(InputArray inputMatToConvert)
{
{
CV_OCL_RUN
((
_ocl_retina
!=
0
),
ocl_run
(
inputMatToConvert
));
CV_OCL_RUN
((
_ocl_retina
!=
0
),
ocl_run
(
inputMatToConvert
));
_wasOCLRunCalled
=
false
;
// first convert input image to the compatible format : std::valarray<float>
// first convert input image to the compatible format : std::valarray<float>
const
bool
colorMode
=
_convertCvMat2ValarrayBuffer
(
inputMatToConvert
.
getMat
(),
_inputBuffer
);
const
bool
colorMode
=
_convertCvMat2ValarrayBuffer
(
inputMatToConvert
.
getMat
(),
_inputBuffer
);
// process the retina
// process the retina
...
@@ -603,6 +606,7 @@ void RetinaImpl::applyFastToneMapping(InputArray inputImage, OutputArray outputT
...
@@ -603,6 +606,7 @@ void RetinaImpl::applyFastToneMapping(InputArray inputImage, OutputArray outputT
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
bool
RetinaImpl
::
ocl_getParvo
(
OutputArray
retinaOutput_parvo
)
bool
RetinaImpl
::
ocl_getParvo
(
OutputArray
retinaOutput_parvo
)
{
{
CV_Assert
(
_wasOCLRunCalled
);
_ocl_retina
->
getParvo
(
retinaOutput_parvo
);
_ocl_retina
->
getParvo
(
retinaOutput_parvo
);
return
true
;
return
true
;
}
}
...
@@ -611,6 +615,7 @@ bool RetinaImpl::ocl_getParvo(OutputArray retinaOutput_parvo)
...
@@ -611,6 +615,7 @@ bool RetinaImpl::ocl_getParvo(OutputArray retinaOutput_parvo)
void
RetinaImpl
::
getParvo
(
OutputArray
retinaOutput_parvo
)
void
RetinaImpl
::
getParvo
(
OutputArray
retinaOutput_parvo
)
{
{
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
retinaOutput_parvo
.
isUMat
(),
ocl_getParvo
(
retinaOutput_parvo
));
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
retinaOutput_parvo
.
isUMat
(),
ocl_getParvo
(
retinaOutput_parvo
));
CV_Assert
(
!
_wasOCLRunCalled
);
if
(
_retinaFilter
->
getColorMode
())
if
(
_retinaFilter
->
getColorMode
())
{
{
...
@@ -627,6 +632,7 @@ void RetinaImpl::getParvo(OutputArray retinaOutput_parvo)
...
@@ -627,6 +632,7 @@ void RetinaImpl::getParvo(OutputArray retinaOutput_parvo)
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
bool
RetinaImpl
::
ocl_getMagno
(
OutputArray
retinaOutput_magno
)
bool
RetinaImpl
::
ocl_getMagno
(
OutputArray
retinaOutput_magno
)
{
{
CV_Assert
(
_wasOCLRunCalled
);
_ocl_retina
->
getMagno
(
retinaOutput_magno
);
_ocl_retina
->
getMagno
(
retinaOutput_magno
);
return
true
;
return
true
;
}
}
...
@@ -635,6 +641,7 @@ bool RetinaImpl::ocl_getMagno(OutputArray retinaOutput_magno)
...
@@ -635,6 +641,7 @@ bool RetinaImpl::ocl_getMagno(OutputArray retinaOutput_magno)
void
RetinaImpl
::
getMagno
(
OutputArray
retinaOutput_magno
)
void
RetinaImpl
::
getMagno
(
OutputArray
retinaOutput_magno
)
{
{
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
retinaOutput_magno
.
isUMat
(),
ocl_getMagno
(
retinaOutput_magno
));
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
retinaOutput_magno
.
isUMat
(),
ocl_getMagno
(
retinaOutput_magno
));
CV_Assert
(
!
_wasOCLRunCalled
);
// reallocate output buffer (if necessary)
// reallocate output buffer (if necessary)
_convertValarrayBuffer2cvMat
(
_retinaFilter
->
getMovingContours
(),
_retinaFilter
->
getOutputNBrows
(),
_retinaFilter
->
getOutputNBcolumns
(),
false
,
retinaOutput_magno
);
_convertValarrayBuffer2cvMat
(
_retinaFilter
->
getMovingContours
(),
_retinaFilter
->
getOutputNBrows
(),
_retinaFilter
->
getOutputNBcolumns
(),
false
,
retinaOutput_magno
);
...
@@ -644,6 +651,7 @@ void RetinaImpl::getMagno(OutputArray retinaOutput_magno)
...
@@ -644,6 +651,7 @@ void RetinaImpl::getMagno(OutputArray retinaOutput_magno)
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
bool
RetinaImpl
::
ocl_getMagnoRAW
(
OutputArray
magnoOutputBufferCopy
)
bool
RetinaImpl
::
ocl_getMagnoRAW
(
OutputArray
magnoOutputBufferCopy
)
{
{
CV_Assert
(
_wasOCLRunCalled
);
_ocl_retina
->
getMagnoRAW
(
magnoOutputBufferCopy
);
_ocl_retina
->
getMagnoRAW
(
magnoOutputBufferCopy
);
return
true
;
return
true
;
}
}
...
@@ -653,7 +661,7 @@ bool RetinaImpl::ocl_getMagnoRAW(OutputArray magnoOutputBufferCopy)
...
@@ -653,7 +661,7 @@ bool RetinaImpl::ocl_getMagnoRAW(OutputArray magnoOutputBufferCopy)
void
RetinaImpl
::
getMagnoRAW
(
OutputArray
magnoOutputBufferCopy
){
void
RetinaImpl
::
getMagnoRAW
(
OutputArray
magnoOutputBufferCopy
){
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
magnoOutputBufferCopy
.
isUMat
(),
ocl_getMagnoRAW
(
magnoOutputBufferCopy
));
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
magnoOutputBufferCopy
.
isUMat
(),
ocl_getMagnoRAW
(
magnoOutputBufferCopy
));
CV_Assert
(
!
_wasOCLRunCalled
);
// get magno channel header
// get magno channel header
const
cv
::
Mat
magnoChannel
=
cv
::
Mat
(
getMagnoRAW
());
const
cv
::
Mat
magnoChannel
=
cv
::
Mat
(
getMagnoRAW
());
// copy data
// copy data
...
@@ -663,6 +671,7 @@ void RetinaImpl::getMagnoRAW(OutputArray magnoOutputBufferCopy){
...
@@ -663,6 +671,7 @@ void RetinaImpl::getMagnoRAW(OutputArray magnoOutputBufferCopy){
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
bool
RetinaImpl
::
ocl_getParvoRAW
(
OutputArray
parvoOutputBufferCopy
)
bool
RetinaImpl
::
ocl_getParvoRAW
(
OutputArray
parvoOutputBufferCopy
)
{
{
CV_Assert
(
_wasOCLRunCalled
);
_ocl_retina
->
getParvoRAW
(
parvoOutputBufferCopy
);
_ocl_retina
->
getParvoRAW
(
parvoOutputBufferCopy
);
return
true
;
return
true
;
}
}
...
@@ -671,7 +680,7 @@ bool RetinaImpl::ocl_getParvoRAW(OutputArray parvoOutputBufferCopy)
...
@@ -671,7 +680,7 @@ bool RetinaImpl::ocl_getParvoRAW(OutputArray parvoOutputBufferCopy)
void
RetinaImpl
::
getParvoRAW
(
OutputArray
parvoOutputBufferCopy
){
void
RetinaImpl
::
getParvoRAW
(
OutputArray
parvoOutputBufferCopy
){
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
parvoOutputBufferCopy
.
isUMat
(),
ocl_getParvoRAW
(
parvoOutputBufferCopy
));
CV_OCL_RUN
((
_ocl_retina
!=
0
)
&&
parvoOutputBufferCopy
.
isUMat
(),
ocl_getParvoRAW
(
parvoOutputBufferCopy
));
CV_Assert
(
!
_wasOCLRunCalled
);
// get parvo channel header
// get parvo channel header
const
cv
::
Mat
parvoChannel
=
cv
::
Mat
(
getParvoRAW
());
const
cv
::
Mat
parvoChannel
=
cv
::
Mat
(
getParvoRAW
());
// copy data
// copy data
...
@@ -680,12 +689,14 @@ void RetinaImpl::getParvoRAW(OutputArray parvoOutputBufferCopy){
...
@@ -680,12 +689,14 @@ void RetinaImpl::getParvoRAW(OutputArray parvoOutputBufferCopy){
// original API level data accessors : get buffers addresses...
// original API level data accessors : get buffers addresses...
const
Mat
RetinaImpl
::
getMagnoRAW
()
const
{
const
Mat
RetinaImpl
::
getMagnoRAW
()
const
{
CV_Assert
(
!
_wasOCLRunCalled
);
// create a cv::Mat header for the valarray
// create a cv::Mat header for the valarray
return
Mat
((
int
)
_retinaFilter
->
getMovingContours
().
size
(),
1
,
CV_32F
,
(
void
*
)
get_data
(
_retinaFilter
->
getMovingContours
()));
return
Mat
((
int
)
_retinaFilter
->
getMovingContours
().
size
(),
1
,
CV_32F
,
(
void
*
)
get_data
(
_retinaFilter
->
getMovingContours
()));
}
}
const
Mat
RetinaImpl
::
getParvoRAW
()
const
{
const
Mat
RetinaImpl
::
getParvoRAW
()
const
{
CV_Assert
(
!
_wasOCLRunCalled
);
if
(
_retinaFilter
->
getColorMode
())
// check if color mode is enabled
if
(
_retinaFilter
->
getColorMode
())
// check if color mode is enabled
{
{
// create a cv::Mat table (for RGB planes as a single vector)
// create a cv::Mat table (for RGB planes as a single vector)
...
@@ -699,6 +710,7 @@ const Mat RetinaImpl::getParvoRAW() const {
...
@@ -699,6 +710,7 @@ const Mat RetinaImpl::getParvoRAW() const {
// private method called by constructors
// private method called by constructors
void
RetinaImpl
::
_init
(
const
cv
::
Size
inputSz
,
const
bool
colorMode
,
int
colorSamplingMethod
,
const
bool
useRetinaLogSampling
,
const
float
reductionFactor
,
const
float
samplingStrenght
)
void
RetinaImpl
::
_init
(
const
cv
::
Size
inputSz
,
const
bool
colorMode
,
int
colorSamplingMethod
,
const
bool
useRetinaLogSampling
,
const
float
reductionFactor
,
const
float
samplingStrenght
)
{
{
_wasOCLRunCalled
=
false
;
// basic error check
// basic error check
if
(
inputSz
.
height
*
inputSz
.
width
<=
0
)
if
(
inputSz
.
height
*
inputSz
.
width
<=
0
)
throw
cv
::
Exception
(
-
1
,
"Bad retina size setup : size height and with must be superior to zero"
,
"RetinaImpl::setup"
,
"Retina.cpp"
,
0
);
throw
cv
::
Exception
(
-
1
,
"Bad retina size setup : size height and with must be superior to zero"
,
"RetinaImpl::setup"
,
"Retina.cpp"
,
0
);
...
...
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