Je suis nouveau sur opencv et j'essaie quelques exemples de codes.
dans un seul code, Mat gr(row1,col1,CV_8UC1,scalar(0)); int x = gr.at<uchar> (row,col);
Et dans un autre,
Mat grHistrogram(301,260,CV_8UC1,Scalar(0,0,0));
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);
Maintenant, ma question est de savoir si j'ai utilisé scalaire (0) au lieu de scalaire (0,0,0) dans le deuxième code, le code ne fonctionne pas. 1.Pourquoi cela se produit depuis, les deux créent une structure d'image Mat. 2. quel est le but de const cv: Scalar & _s.
Je recherche la Documentaion sur le site Opencv (opencv.pdf, opencv2refman.pdf) et le livre Opencv d'Oreilly. Mais je n'ai pas pu trouver de réponse expliquée.
Je pense que j'utilise la structure Mat (int _rows, int _cols, int _type, const cv: Scalar & _s).
Tout d'abord, vous avez besoin des informations suivantes pour créer l'image:
Vous pouvez créer l'image en utilisant cv::Mat
:
Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));
Le 8U
Signifie le 8 - bit U entier signé, C3
Signifie C canaux pour la couleur RVB, et Scalar(0, 0, 0)
est la valeur initiale pour chaque pixel. De même,
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);
consiste à tracer une ligne sur grHistogram
du point pt1
au point pt2
. La couleur de la ligne est blanche (255, 255, 255) avec une épaisseur de 1 pixel, une ligne connectée à 8 et un décalage de 0.
Parfois, vous n'avez pas besoin d'une image RVB, mais d'une simple image en niveaux de gris. Autrement dit, utilisez un canal au lieu de trois. Le type peut être changé en CV_8UC1
Et il vous suffit de spécifier l'intensité pour un canal, Scalar(0)
par exemple.
Revenons à votre problème,
Pourquoi cela se produit-il depuis, les deux créent une structure d'image Mat?
Parce que vous devez spécifier le type de Mat
. Est-ce une image en couleur CV_8UC3
Ou une image en niveaux de gris CV_8UC1
? Ils sont différents. Votre programme peut ne pas fonctionner comme vous le pensez si vous utilisez Scalar(255)
sur une image CV_8UC3
.
Quel est le but de const cv: Scalar & _s?
cv::Scalar
Est utilisé pour spécifier la valeur d'intensité pour chaque pixel. Par exemple, Scalar(255, 0, 0)
est bleu et Scalar(0, 0, 0)
est noir si le type est CV_8UC3
. Ou Scalar(0)
est noir s'il s'agit d'une image en niveaux de gris CV_8UC1
. Évitez de les mélanger.
Vous pouvez créer une image à canal unique ou une image à canaux multiples.
création d'une image monocanal: Mat img(500, 1000, CV_8UC1, Scalar(70));
création d'une image multicanal: Mat img1(500, 1000, CV_8UC3, Scalar(10, 100, 150));
vous pouvez voir plus d'exemples et de détails sur la page suivante. https://progtpoint.blogspot.com/2017/01/tutorial-3-create-image.html