【问题标题】:How to set all pixels of an OpenCV Mat to a specific value?如何将 OpenCV Mat 的所有像素设置为特定值?
【发布时间】:2014-01-16 00:07:58
【问题描述】:

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

【问题讨论】:

    标签: c++ opencv matrix


    【解决方案1】:

    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& Mat::operator=(const Scalar& s)

    s – 分配给每个矩阵元素的标量。矩阵大小或类型没有改变。

    【讨论】:

    • 由于 Scalar(123) 仅初始化 Scalar 的 1st 元素,如果 Mat 有多个通道,您可能需要 Scalar::all(123) 。
    【解决方案2】:
    • 对于灰度图像:

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

    P.S.:如果您想进一步了解如何在不更改其他通道的情况下有效地将cv::Mat 的给定通道设置为给定值,请查看this thread

    【讨论】:

      【解决方案3】:

      你可以用另一种方式来使用

      Mat::setTo

      喜欢

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

      【讨论】:

        猜你喜欢
        • 2012-07-11
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多