|
|
|
@ -3378,6 +3378,7 @@ static bool ocl_sepRowFilter2D( UMat &src, UMat &buf, Mat &kernelX, int anchor, |
|
|
|
|
btype, |
|
|
|
|
extra_extrapolation ? "EXTRA_EXTRAPOLATION" : "NO_EXTRA_EXTRAPOLATION", |
|
|
|
|
isIsolatedBorder ? "BORDER_ISOLATED" : "NO_BORDER_ISOLATED"); |
|
|
|
|
build_options += ocl::kernelToStr(kernelX, CV_32F); |
|
|
|
|
|
|
|
|
|
Size srcWholeSize; Point srcOffset; |
|
|
|
|
src.locateROI(srcWholeSize, srcOffset); |
|
|
|
@ -3390,7 +3391,8 @@ static bool ocl_sepRowFilter2D( UMat &src, UMat &buf, Mat &kernelX, int anchor, |
|
|
|
|
strKernel << "_D" << sdepth; |
|
|
|
|
|
|
|
|
|
ocl::Kernel kernelRow; |
|
|
|
|
if (!kernelRow.create(strKernel.str().c_str(), cv::ocl::imgproc::filterSepRow_oclsrc, build_options)) |
|
|
|
|
if (!kernelRow.create(strKernel.str().c_str(), cv::ocl::imgproc::filterSepRow_oclsrc, |
|
|
|
|
build_options)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
int idxArg = 0; |
|
|
|
@ -3409,7 +3411,6 @@ static bool ocl_sepRowFilter2D( UMat &src, UMat &buf, Mat &kernelX, int anchor, |
|
|
|
|
idxArg = kernelRow.set(idxArg, buf.cols); |
|
|
|
|
idxArg = kernelRow.set(idxArg, buf.rows); |
|
|
|
|
idxArg = kernelRow.set(idxArg, radiusY); |
|
|
|
|
idxArg = kernelRow.set(idxArg, ocl::KernelArg::PtrReadOnly(kernelX.getUMat(ACCESS_READ))); |
|
|
|
|
|
|
|
|
|
return kernelRow.run(2, globalsize, localsize, sync); |
|
|
|
|
} |
|
|
|
@ -3479,6 +3480,8 @@ static bool ocl_sepColFilter2D(UMat &buf, UMat &dst, Mat &kernelY, int anchor, b |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
build_options += ocl::kernelToStr(kernelY, CV_32F); |
|
|
|
|
|
|
|
|
|
ocl::Kernel kernelCol; |
|
|
|
|
if (!kernelCol.create("col_filter", cv::ocl::imgproc::filterSepCol_oclsrc, build_options)) |
|
|
|
|
return false; |
|
|
|
@ -3494,7 +3497,6 @@ static bool ocl_sepColFilter2D(UMat &buf, UMat &dst, Mat &kernelY, int anchor, b |
|
|
|
|
idxArg = kernelCol.set(idxArg, (int)(dst.step / dst.elemSize())); |
|
|
|
|
idxArg = kernelCol.set(idxArg, dst.cols); |
|
|
|
|
idxArg = kernelCol.set(idxArg, dst.rows); |
|
|
|
|
idxArg = kernelCol.set(idxArg, ocl::KernelArg::PtrReadOnly(kernelY.getUMat(ACCESS_READ))); |
|
|
|
|
|
|
|
|
|
return kernelCol.run(2, globalsize, localsize, sync); |
|
|
|
|
} |
|
|
|
@ -3508,7 +3510,7 @@ static bool ocl_sepFilter2D( InputArray _src, OutputArray _dst, int ddepth, |
|
|
|
|
|
|
|
|
|
int type = _src.type(); |
|
|
|
|
if ( !( (CV_8UC1 == type || CV_8UC4 == type || CV_32FC1 == type || CV_32FC4 == type) && |
|
|
|
|
(ddepth == CV_32F || ddepth == CV_8U) ) ) |
|
|
|
|
(ddepth == CV_32F || ddepth == CV_8U || ddepth < 0) ) ) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
int cn = CV_MAT_CN(type); |
|
|
|
@ -3541,12 +3543,12 @@ static bool ocl_sepFilter2D( InputArray _src, OutputArray _dst, int ddepth, |
|
|
|
|
Size srcSize = src.size(); |
|
|
|
|
Size bufSize(srcSize.width, srcSize.height + kernelY.cols - 1); |
|
|
|
|
UMat buf; buf.create(bufSize, CV_MAKETYPE(CV_32F, cn)); |
|
|
|
|
if (!ocl_sepRowFilter2D(src, buf, kernelX, anchor.x, borderType, true)) |
|
|
|
|
if (!ocl_sepRowFilter2D(src, buf, kernelX, anchor.x, borderType, false)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
_dst.create(srcSize, CV_MAKETYPE(ddepth, cn)); |
|
|
|
|
UMat dst = _dst.getUMat(); |
|
|
|
|
return ocl_sepColFilter2D(buf, dst, kernelY, anchor.y, true); |
|
|
|
|
return ocl_sepColFilter2D(buf, dst, kernelY, anchor.y, false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|