2014-10-09 35 views
1

我想分割输入图像和模糊它的瓦片,但毕竟在相邻瓷砖cv::blur invocations我已经有边界像素,这与我所不同的是,当将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

P.S.3是我的最爱。安慰。只是说:D然而,你的意思是*'着色源代码'* – 2014-10-09 16:03:17

+0

注意:添加语言标签可以修复你的语法着色。 – 2014-10-09 16:05:55

+0

致@PaulR:我的声望级别太低,无法添加C++标记。 – parallelgeek 2014-10-09 20:33:33

回答

3

您所看到的问题是因为您正在尝试在原地进行此操作。一旦对图像的一部分进行了模糊处理,就会导致模糊图像相邻部分所需的无效源像素。解决方法是不要在原地进行,以便原始源像素可用于要模糊的图像的任何部分。

+0

没想到这么简单。谢谢!顺便说一句,你不知道OpenCV的最早版本,它实际上“看到”超出ROI边界的图像像素吗? – parallelgeek 2014-10-09 20:37:39

+1

只要我检查一下就会接受你的答案。 – parallelgeek 2014-10-09 20:44:58