2013-04-13 69 views
3

我想在opencv4android中使用filter2d寫一個簡單的代碼。 但調用函數'filter2d'後,在目標墊,我得到零(它沒有正確運行功能)。在opencv4android filter2d

的結果應該是:

0.3750 0.5000 0.5000 0.5000 0.3750 
     0   0   0   0   0 
     0   0   0   0   0 
     0   0   0   0   0 
-0.3750 -0.5000 -0.5000 -0.5000 -0.3750 

我試圖改變源的和內核的深度/類型,但它並沒有幫助。

這裏是我的代碼:

Mat sourceMat = new Mat(5, 5, CvType.CV_32F); 
    Mat convMat = new Mat(3, 3, CvType.CV_32F); 
    Mat destMat = Mat.zeros(5, 5, CvType.CV_32F); 

    sourceMat.put(0,0,1); 
    sourceMat.put(0,1,1); 
    sourceMat.put(0,2,1); 
    sourceMat.put(0,3,1); 
    sourceMat.put(0,4,1); 
    sourceMat.put(1,0,1); 
    sourceMat.put(1,1,1); 
    sourceMat.put(1,2,1); 
    sourceMat.put(1,3,1); 
    sourceMat.put(1,4,1); 
    sourceMat.put(2,0,1); 
    sourceMat.put(2,1,1); 
    sourceMat.put(2,2,1); 
    sourceMat.put(2,3,1); 
    sourceMat.put(2,4,1); 
    sourceMat.put(3,0,1); 
    sourceMat.put(3,1,1); 
    sourceMat.put(3,2,1); 
    sourceMat.put(3,3,1); 
    sourceMat.put(3,4,1); 
    sourceMat.put(4,0,1); 
    sourceMat.put(4,1,1); 
    sourceMat.put(4,2,1); 
    sourceMat.put(4,3,1); 
    sourceMat.put(4,4,1); 

    convMat.put(0,0, 0.125); 
    convMat.put(0,1, 0.5); 
    convMat.put(0,2, 0.125); 
    convMat.put(1,0, 0); 
    convMat.put(1,1, 0); 
    convMat.put(1,2, 0); 
    convMat.put(2,0, -0.125); 
    convMat.put(2,1, -0.5); 
    convMat.put(2,2, -0.125); 


    Imgproc.filter2D(sourceMat, destMat, sourceMat.depth(), convMat); 

誰能告訴我這裏有什麼問題嗎?有什麼我做錯了嗎?

回答

1

這裏沒有錯。 OpenCV結果對於filter2d函數中使用的默認邊界處理模式是正確的。

您需要將最後的borderType參數設置爲Imgproc.BORDER_CONSTANT才能獲得預期的結果。

+0

您好!我想向您發送一封有關自由職業機會的電子郵件。如果您有興趣,請在[Twitter](https://twitter.com/karlphillip)或[LinkedIn](http://www.linkedin.com/in/karlphillip)上留言。 – karlphillip