2013-06-26 5 views
9

Ich versuche, das Ding um die Zahl mit erodieren und erweitern Prozess zu beseitigen. Ich habe versucht, aber nichts ist passiert. Ich habe die Werte geändert, nur um zu sehen, ob sich etwas ändern würde, aber auch hier hat sich nichts geändert. Das Bild wird wie im obigen Link fortgesetzt. Was ist mit diesen Parametern ... Ich lese die Dokumentation, verstehe sie aber nicht ganz (wie Sie sehen können, habe ich in der Funktion geraten). Was mache ich falsch?Wie erodiert und erweitert man die Funktion in opencv?

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

der Code:

#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

, lassen Sie sich aus der Dokumentation beginnen http://docs.opencv.org/modules/imgproc/doc/filtering.html#void%20dilate%28InputArray%20src,%20OutputArray%20dst,%20InputArray%20kernel,%20Point % 20anchor,% 20int% 20iterations,% 20int% 20borderType,% 20const% 20Scalar &% 20borderValue% 29 geben Sie mir einen Moment ... – Antonio

Antwort

13

Nach official docs sollte das dritte Argument der Kern (oder Strukturierungselement). Sie passieren derzeit 0:

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

Versuchen Sie es auf diese Weise umschreiben:

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

In diesem Fall wird ein Standard-3x3-Kernel verwendet.

+1

Es funktioniert, danke! : D Aber warum? Was macht diese "Mat()"? – U23r

+4

@Anne Das erstellt eine leere 'cv :: Mat'. Laut den Dokumenten wird "if' element = Mat() ', ein 3 × 3 rechteckiges strukturierendes Element verwendet." – Aurelius

1

Kernel ist im Grunde eine Matrix. Dies wird in der Eingabematrix (Bild) multipliziert oder überlappt, um die gewünschte Ausgabe-modifizierte (in diesem Fall dilatierte) Matrix (Bild) zu erzeugen.

Versuchen Sie, die Parameter von Mat() in dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1); Ändern Sie ändern im Grunde die Anzahl der Pixel (Höhe und Breite) des Kerns, die die Erweiterung Auswirkungen auf die ursprüngliche Bild ändern wird.

Also in den Parametern dilate verwenden Sie Mat() anstelle einer Zahl wie bereits von esenti angegeben. So

Verwandte Themen