added cv::threshold to T-API
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
//M*/
|
||||
|
||||
#include "precomp.hpp"
|
||||
#include "opencl_kernels.hpp"
|
||||
|
||||
namespace cv
|
||||
{
|
||||
@@ -705,10 +706,47 @@ private:
|
||||
int thresholdType;
|
||||
};
|
||||
|
||||
static bool ocl_threshold( InputArray _src, OutputArray _dst, double & thresh, double maxval, int thresh_type )
|
||||
{
|
||||
int type = _src.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type), ktype = CV_MAKE_TYPE(depth, 1);
|
||||
bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0;
|
||||
|
||||
if ( !(thresh_type == THRESH_BINARY || thresh_type == THRESH_BINARY_INV || thresh_type == THRESH_TRUNC ||
|
||||
thresh_type == THRESH_TOZERO || thresh_type == THRESH_TOZERO_INV) ||
|
||||
(!doubleSupport && depth == CV_64F))
|
||||
return false;
|
||||
|
||||
const char * const thresholdMap[] = { "THRESH_BINARY", "THRESH_BINARY_INV", "THRESH_TRUNC",
|
||||
"THRESH_TOZERO", "THRESH_TOZERO_INV" };
|
||||
ocl::Kernel k("threshold", ocl::imgproc::threshold_oclsrc,
|
||||
format("-D %s -D T=%s%s", thresholdMap[thresh_type],
|
||||
ocl::typeToStr(ktype), doubleSupport ? " -D DOUBLE_SUPPORT" : ""));
|
||||
if (k.empty())
|
||||
return false;
|
||||
|
||||
UMat src = _src.getUMat();
|
||||
_dst.create(src.size(), type);
|
||||
UMat dst = _dst.getUMat();
|
||||
|
||||
if (depth <= CV_32S)
|
||||
thresh = cvFloor(thresh);
|
||||
|
||||
k.args(ocl::KernelArg::ReadOnlyNoSize(src), ocl::KernelArg::WriteOnly(dst, cn),
|
||||
ocl::KernelArg::Constant(Mat(1, 1, ktype, thresh)),
|
||||
ocl::KernelArg::Constant(Mat(1, 1, ktype, maxval)));
|
||||
|
||||
size_t globalsize[2] = { dst.cols * cn, dst.rows };
|
||||
return k.run(2, globalsize, NULL, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
double cv::threshold( InputArray _src, OutputArray _dst, double thresh, double maxval, int type )
|
||||
{
|
||||
if (ocl::useOpenCL() && _src.dims() <= 2 && _dst.isUMat() &&
|
||||
ocl_threshold(_src, _dst, thresh, maxval, type))
|
||||
return thresh;
|
||||
|
||||
Mat src = _src.getMat();
|
||||
bool use_otsu = (type & THRESH_OTSU) != 0;
|
||||
type &= THRESH_MASK;
|
||||
|
||||
Reference in New Issue
Block a user