cv::compare
This commit is contained in:
@@ -2624,16 +2624,23 @@ static bool ocl_compare(InputArray _src1, InputArray _src2, OutputArray _dst, in
|
||||
|
||||
bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0;
|
||||
int type = _src1.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type), type2 = _src2.type();
|
||||
if (!doubleSupport && (depth == CV_64F || _src2.depth() == CV_64F))
|
||||
if ( (!doubleSupport && (depth == CV_64F || _src2.depth() == CV_64F)) ||
|
||||
!_src1.sameSize(_src2) || type != type2)
|
||||
return false;
|
||||
|
||||
int kercn = ocl::predictOptimalVectorWidth(_src1, _src2, _dst);
|
||||
const char * const operationMap[] = { "==", ">", ">=", "<", "<=", "!=" };
|
||||
char cvt[40];
|
||||
|
||||
ocl::Kernel k("KF", ocl::core::arithm_oclsrc,
|
||||
format("-D BINARY_OP -D srcT1=%s -D workT=srcT1 -D cn=1"
|
||||
" -D OP_CMP -D CMP_OPERATOR=%s%s",
|
||||
ocl::typeToStr(CV_MAKE_TYPE(depth, 1)),
|
||||
operationMap[op],
|
||||
doubleSupport ? " -D DOUBLE_SUPPORT" : ""));
|
||||
format("-D BINARY_OP -D srcT1=%s -D dstT=%s -D workT=srcT1 -D cn=%d"
|
||||
" -D convertToDT=%s -D OP_CMP -D CMP_OPERATOR=%s%s -D srcT1_C1=%s"
|
||||
" -D srcT2_C1=%s -D dstT_C1=%s",
|
||||
ocl::typeToStr(CV_MAKE_TYPE(depth, kercn)),
|
||||
ocl::typeToStr(CV_8UC(kercn)), kercn,
|
||||
ocl::convertTypeStr(depth, CV_8U, kercn, cvt),
|
||||
operationMap[op], doubleSupport ? " -D DOUBLE_SUPPORT" : "",
|
||||
ocl::typeToStr(depth), ocl::typeToStr(depth), ocl::typeToStr(CV_8U)));
|
||||
if (k.empty())
|
||||
return false;
|
||||
|
||||
@@ -2647,9 +2654,9 @@ static bool ocl_compare(InputArray _src1, InputArray _src2, OutputArray _dst, in
|
||||
|
||||
k.args(ocl::KernelArg::ReadOnlyNoSize(src1),
|
||||
ocl::KernelArg::ReadOnlyNoSize(src2),
|
||||
ocl::KernelArg::WriteOnly(dst, cn));
|
||||
ocl::KernelArg::WriteOnly(dst, cn, kercn));
|
||||
|
||||
size_t globalsize[2] = { dst.cols * cn, dst.rows };
|
||||
size_t globalsize[2] = { dst.cols * cn / kercn, dst.rows };
|
||||
return k.run(2, globalsize, NULL, false);
|
||||
}
|
||||
|
||||
|
@@ -1311,7 +1311,7 @@ static BinaryFunc getConvertScaleFunc(int sdepth, int ddepth)
|
||||
static bool ocl_convertScaleAbs( InputArray _src, OutputArray _dst, double alpha, double beta )
|
||||
{
|
||||
int type = _src.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type),
|
||||
kercn = cn > 4 || cn == 3 ? 1 : ocl::predictOptimalVectorWidth(_src, _dst);
|
||||
kercn = ocl::predictOptimalVectorWidth(_src, _dst);
|
||||
bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0;
|
||||
|
||||
if (!doubleSupport && depth == CV_64F)
|
||||
|
@@ -63,7 +63,7 @@ static const char* oclop2str[] = { "OP_LOG", "OP_EXP", "OP_MAG", "OP_PHASE_DEGRE
|
||||
static bool ocl_math_op(InputArray _src1, InputArray _src2, OutputArray _dst, int oclop)
|
||||
{
|
||||
int type = _src1.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type);
|
||||
int kercn = cn == 3 || cn > 4 || oclop == OCL_OP_PHASE_DEGREES ||
|
||||
int kercn = oclop == OCL_OP_PHASE_DEGREES ||
|
||||
oclop == OCL_OP_PHASE_RADIANS ? 1 : ocl::predictOptimalVectorWidth(_src1, _src2, _dst);
|
||||
|
||||
bool double_support = ocl::Device::getDefault().doubleFPConfig() > 0;
|
||||
|
@@ -2158,7 +2158,7 @@ typedef void (*ScaleAddFunc)(const uchar* src1, const uchar* src2, uchar* dst, i
|
||||
static bool ocl_scaleAdd( InputArray _src1, double alpha, InputArray _src2, OutputArray _dst, int type )
|
||||
{
|
||||
int depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type), wdepth = std::max(depth, CV_32F),
|
||||
kercn = cn == 3 || cn > 4 ? 1 : ocl::predictOptimalVectorWidth(_src1, _src2, _dst);
|
||||
kercn = ocl::predictOptimalVectorWidth(_src1, _src2, _dst);
|
||||
bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0;
|
||||
Size size = _src1.size();
|
||||
|
||||
|
@@ -279,10 +279,9 @@
|
||||
storedst(v > (dstT)(0) ? log(v) : log(-v))
|
||||
|
||||
#elif defined OP_CMP
|
||||
#define dstT uchar
|
||||
#define srcT2 srcT1
|
||||
#define convertToWT1
|
||||
#define PROCESS_ELEM storedst(convert_uchar(srcelem1 CMP_OPERATOR srcelem2 ? 255 : 0))
|
||||
#define PROCESS_ELEM storedst(convertToDT(srcelem1 CMP_OPERATOR srcelem2 ? (dstT)(255) : (dstT)(0)))
|
||||
|
||||
#elif defined OP_CONVERT_SCALE_ABS
|
||||
#undef EXTRA_PARAMS
|
||||
|
Reference in New Issue
Block a user