我尝试对输入图像进行分段并逐层模糊,但在相邻图块上的所有cv::blur
次调用后,我都有边框像素,这与I&#不同39;当你同时将cv::blur
集体应用于整个图像时得到了。
Mat upper(im, Rect( 0,0, 10,10 ));
Mat lower(im, Rect( 0,11, 10,20 ))
blur( upper, upper, Size( 5, 5 ) );
blur( lower, lower, Size( 5, 5 ) );
看起来我使用的库版本(2.4.8)没有做到我期望通过以下内容阅读:
与早期版本的OpenCV不同,现在过滤操作完全支持图像ROI的概念,即ROI之外的像素,但图像内部的像素可用于过滤操作
(摘自:See FilterEngine::apply description here)
P.S.1:我尝试提取cv::boxFilter
实现并更改srcRoi
参数值,但也有错误的结果。
Mat src = im.clone();
Mat dst = src; // Trying to perform the operation in-place
Size ksize( 5, 5 );
Point anchor(-1,-1);
Ptr<FilterEngine> f = createBoxFilter(
src.type(), dst.type(),
ksize, anchor, true, BORDER_DEFAULT
);
f->apply(
src, dst,
Rect(0,0,10,10),
Point(0,0), false
);
f->apply(
src, dst,
Rect(0,0,10,10),
Point(0,11), false
);
P.S.2:帮助着色源代码会有所帮助。
答案 0 :(得分:3)
您遇到的问题是因为您正在尝试就地执行此操作。一旦您模糊了部分图像,您就会使模糊图像的任何相邻部分所需的源像素无效。解决方案是不要就地执行此操作,以便原始源像素可用于您想要模糊的图像的任何部分。