web-dev-qa-db-fra.com

Comment définir tous les pixels d'un tapis OpenCV sur une valeur spécifique?

J'ai une image de type CV_8UC1. Comment puis-je définir toutes les valeurs de pixels sur une valeur spécifique?

19
Drew Noakes
  • 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.

51
herohuyongtao

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é.

8
Drew Noakes

D'une autre manière, vous pouvez utiliser

Mat :: setTo

Comme

      Mat src(480,640,CV_8UC1);
      src.setTo(123); //assign 123
3
Haris