Как установить все пиксели матрицы OpenCV на определенное значение?

У меня есть изображение типа CV_8UC1. Как установить все значения пикселей на определенное значение?

Ответ 1

  • Для изображения в оттенках серого:

    cv::Mat m(100, 100, CV_8UC1); //gray 
    m = Scalar(5);  //used only Scalar.val[0] 
    

    или

    cv::Mat m(100, 100, CV_8UC1); //gray 
    m.setTo(Scalar(5));  //used only Scalar.val[0] 
    

    или

    Mat mat = Mat(100, 100, CV_8UC1, cv::Scalar(5));
    
  • Для цветного изображения (например, 3 канала)

    cv::Mat m(100, 100, CV_8UC3); //3-channel 
    m = Scalar(5, 10, 15);  //Scalar.val[0-2] used 
    

    или

    cv::Mat m(100, 100, CV_8UC3); //3-channel 
    m.setTo(Scalar(5, 10, 15));  //Scalar.val[0-2] used 
    

    или

    Mat mat = Mat(100, 100, CV_8UC3, cv::Scalar(5,10,15));
    

PS: просмотрите этот поток, если вы хотите узнать, как установить данный канал cv::Mat на заданное значение эффективно, не меняя другие каналы.

Ответ 2

Оператор присваивания для cv::Mat был реализован для разрешения назначения cv::Scalar следующим образом:

// Create a greyscale image
cv::Mat mat(cv::Size(cols, rows), CV_8UC1);

// Set all pixel values to 123
mat = cv::Scalar:all(123);

Документация описывает:

Мат & Mat:: operator = (const Scalar & s)

s - Скаляр, назначенный каждому матричному элементу. Размер или тип матрицы не изменяется.

Ответ 3

По-другому вы можете использовать

Мат:: setTo

Как

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