2013-06-26 19 views
9

Aşırı erozyon ve genişleme işlemiyle sayıyı ortadan kaldırmaya çalışıyorum. Denedim ama hiçbir şey olmadı. Bir şeyi değiştirip değiştirmeyeceğini görmek için değerleri değiştirdim ama yine de hiçbir şey değişmedi. Görüntü, yukarıdaki bağlantıda olduğu gibi devam eder. Bu parametrelerden ne haber… Belgeleri okudum ama tam olarak anlamadım (gördüğünüz gibi, fonksiyonda tahmin ediyordum). Neyi yanlış yapıyorum?Opencv'de erozyon ve dilate işlevi nasıl kullanılır?

Resim https://docs.google.com/file/d/0BzUNc6BOkYrNeVhYUk1oQjFSQTQ/edit?usp=sharing

kodu:

#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace cv; 

int main (int argc, char **argv) 
{ 
    Mat im_gray; 
    Mat img_bw; 
    Mat img_final; 

    Mat im_rgb = imread("cam.jpg"); 
    cvtColor(im_rgb,im_gray,CV_RGB2GRAY); 


    adaptiveThreshold(im_gray, img_bw, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY_INV, 105, 1); 


    dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1); 


    imwrite("cam_final.jpg", img_final); 

    return 0; 
} 
+0

Yani, http://docs.opencv.org/modules/imgproc/doc/filtering.html#void%20dilate%28InputArray%20src%20OutputArray%20dst%%%%%%%Ca%%%C3%B1 % 20anchor,% 20int% 20iterations,% 20int% 20borderType,% 20const% 20Scalar &% 20borderValue% 29 bana bir dakika verir ... – Antonio

cevap

13

official docs göre, üçüncü bir bağımsız değişken çekirdek (veya yapı elemanı) olmalıdır. Şu anda 0 geçiyoruz:

dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1); 

bu şekilde yeniden deneyin:

dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1); 

Bu durumda, varsayılan bir 3x3 çekirdek kullanılacaktır.

+1

Çalışır, teşekkürler! : D Ama neden? Bu "Mat()" ne yapıyor? – U23r

+4

@Anne Boş bir 'cv :: Mat' oluşturan. Dokümanlara göre, "if' element = Mat() ", 3 x 3 dikdörtgen bir yapılandırma elemanı kullanılır." – Aurelius

1

Çekirdek temelde bir matristir. Bu, istenen matrisin (bu durumda genişletilmiş) matrisini (imaj) üretmek için girdi matrisi (görüntü) üzerinde çarpılır veya üst üste gelir. dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1); içinde Mat() parametrelerini değiştirerek

deneyin temelde orijinal pic üzerinde genişlemesi etkisini değişecek çekirdeğin piksel sayısını (yükseklik ve genişlik), değiştiriyoruz.

dilate parametrelerinde, esenti tarafından belirtildiği gibi bir sayı yerine Mat() kullanın.

İlgili konular