如何将OpenCV Mat的所有像素设置为特定值?

时间:2013-12-28 16:51:35

标签: c++ opencv matrix

我的图片类型为CV_8UC1。如何将所有像素值设置为特定值?

3 个答案:

答案 0 :(得分:51)

  • 对于灰度图像:

    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的指定频道设置为给定值,请查看this thread

答案 1 :(得分:8)

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);

documentation描述:

  

垫&安培; Mat :: operator =(const Scalar& s)

     

s - 为每个矩阵元素分配的标量。矩阵大小或类型不会更改。

答案 2 :(得分:3)

另一种方法是你可以使用

Mat::setTo

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