Merge pull request #7554 from lupustr3:pvlasov/morph_isolated
This commit is contained in:
commit
bdfb4decb2
@ -864,17 +864,19 @@ void cv::Laplacian( InputArray _src, OutputArray _dst, int ddepth, int ksize,
|
||||
ocl_Laplacian5(_src, _dst, kd, ks, scale,
|
||||
delta, borderType, wdepth, ddepth))
|
||||
|
||||
Mat src = _src.getMat(), dst = _dst.getMat();
|
||||
Point ofs;
|
||||
Size wsz(src.cols, src.rows);
|
||||
if(!(borderType&BORDER_ISOLATED))
|
||||
src.locateROI( wsz, ofs );
|
||||
borderType = (borderType&~BORDER_ISOLATED);
|
||||
|
||||
const size_t STRIPE_SIZE = 1 << 14;
|
||||
Ptr<FilterEngine> fx = createSeparableLinearFilter(stype,
|
||||
wtype, kd, ks, Point(-1,-1), 0, borderType, borderType, Scalar() );
|
||||
Ptr<FilterEngine> fy = createSeparableLinearFilter(stype,
|
||||
wtype, ks, kd, Point(-1,-1), 0, borderType, borderType, Scalar() );
|
||||
|
||||
Mat src = _src.getMat(), dst = _dst.getMat();
|
||||
Point ofs;
|
||||
Size wsz(src.cols, src.rows);
|
||||
src.locateROI( wsz, ofs );
|
||||
|
||||
int y = fx->start(src, wsz, ofs), dsty = 0, dy = 0;
|
||||
fy->start(src, wsz, ofs);
|
||||
const uchar* sptr = src.ptr() + src.step[0] * y;
|
||||
|
||||
@ -1855,15 +1855,21 @@ static void morphOp( int op, InputArray _src, OutputArray _dst,
|
||||
|
||||
Point s_ofs;
|
||||
Size s_wsz(src.cols, src.rows);
|
||||
src.locateROI(s_wsz, s_ofs);
|
||||
Point d_ofs;
|
||||
Size d_wsz(dst.cols, dst.rows);
|
||||
dst.locateROI(d_wsz, d_ofs);
|
||||
bool isolated = (borderType&BORDER_ISOLATED)?true:false;
|
||||
borderType = (borderType&~BORDER_ISOLATED);
|
||||
|
||||
if(!isolated)
|
||||
{
|
||||
src.locateROI(s_wsz, s_ofs);
|
||||
dst.locateROI(d_wsz, d_ofs);
|
||||
}
|
||||
|
||||
Ptr<hal::Morph> ctx = hal::Morph::create(op, src.type(), dst.type(), src.cols, src.rows,
|
||||
kernel.type(), kernel.data, kernel.step, kernel.cols, kernel.rows,
|
||||
anchor.x, anchor.y, borderType, borderValue.val, iterations,
|
||||
src.isSubmatrix(), src.data == dst.data);
|
||||
(src.isSubmatrix() && !isolated), src.data == dst.data);
|
||||
ctx->apply(src.data, src.step, dst.data, dst.step, src.cols, src.rows,
|
||||
s_wsz.width, s_wsz.height, s_ofs.x, s_ofs.y,
|
||||
d_wsz.width, d_wsz.height, d_ofs.x, d_ofs.y);
|
||||
|
||||
@ -1717,11 +1717,14 @@ void cv::boxFilter( InputArray _src, OutputArray _dst, int ddepth,
|
||||
ipp_boxfilter( _src, _dst, ddepth, ksize, anchor, normalize, borderType));
|
||||
#endif
|
||||
|
||||
Ptr<FilterEngine> f = createBoxFilter( src.type(), dst.type(),
|
||||
ksize, anchor, normalize, borderType );
|
||||
Point ofs;
|
||||
Size wsz(src.cols, src.rows);
|
||||
src.locateROI( wsz, ofs );
|
||||
if(!(borderType&BORDER_ISOLATED))
|
||||
src.locateROI( wsz, ofs );
|
||||
borderType = (borderType&~BORDER_ISOLATED);
|
||||
|
||||
Ptr<FilterEngine> f = createBoxFilter( src.type(), dst.type(),
|
||||
ksize, anchor, normalize, borderType );
|
||||
|
||||
f->apply( src, dst, wsz, ofs );
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user