J'ai une image de type CV_8UC1
. Comment puis-je définir toutes les valeurs de pixels sur une valeur spécifique?
Pour l'image en niveaux de gris:
cv::Mat m(100, 100, CV_8UC1); //gray
m = Scalar(5); //used only Scalar.val[0]
ou
cv::Mat m(100, 100, CV_8UC1); //gray
m.setTo(Scalar(5)); //used only Scalar.val[0]
ou
Mat mat = Mat(100, 100, CV_8UC1, cv::Scalar(5));
Pour une image en couleur (par exemple 3 canaux)
cv::Mat m(100, 100, CV_8UC3); //3-channel
m = Scalar(5, 10, 15); //Scalar.val[0-2] used
ou
cv::Mat m(100, 100, CV_8UC3); //3-channel
m.setTo(Scalar(5, 10, 15)); //Scalar.val[0-2] used
ou
Mat mat = Mat(100, 100, CV_8UC3, cv::Scalar(5,10,15));
P.S. : Consultez ce fil si vous voulez en outre savoir comment définir le canal donné d'un cv::Mat
à une valeur donnée efficacement sans changer d'autres canaux.
L'opérateur d'affectation pour cv::Mat
a été implémenté pour permettre l'attribution d'un cv::Scalar
comme ça:
// Create a greyscale image
cv::Mat mat(cv::Size(cols, rows), CV_8UC1);
// Set all pixel values to 123
mat = cv::Scalar:all(123);
Le documentation décrit:
Mat & Mat :: operator = (const Scalar & s)
s - Scalaire attribué à chaque élément de matrice. La taille ou le type de matrice n'est pas modifié.
D'une autre manière, vous pouvez utiliser
Comme
Mat src(480,640,CV_8UC1);
src.setTo(123); //assign 123