2014-10-09 36 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