J'essaie d'éliminer la chose autour du nombre avec le processus d'érosion et de dilatation. J'ai essayé mais rien ne s'est passé. J'ai changé les valeurs juste pour voir si cela changerait quelque chose, mais encore une fois, rien n'a changé. L'image continue comme dans le lien ci-dessus. Qu'en est-il de ces paramètres ... J'ai lu la documentation mais je ne comprends pas très bien (comme vous pouvez le constater, je devinais dans la fonction). Qu'est-ce que je fais mal?
l'image: https://docs.google.com/file/d/0BzUNc6BOkYrNeVhYUk1oQjFSQTQ/edit?usp=sharing
le 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;
}
Selon docs officiel , le troisième argument devrait être le noyau (ou l’élément structurant). Vous êtes en train de passer 0:
dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1);
Essayez de le réécrire de cette façon:
dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1);
Dans ce cas, un noyau 3x3 par défaut sera utilisé.
Le noyau est fondamentalement une matrice. Ceci est multiplié ou chevauché sur la matrice d'entrée (image) pour produire la sortie souhaitée modifiée (dans ce cas, la matrice dilatée) (image).
Essayez de modifier les paramètres de Mat()
dans dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1);
En règle générale, vous modifiez le nombre de pixels (hauteur et largeur) du noyau, ce qui modifiera l'effet de dilatation de la photo d'origine.
Ainsi, dans les paramètres de dilate
, vous utilisez Mat()
au lieu d'un nombre déjà indiqué par esenti.