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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将OpenCV Mat的所有像素设置为特定值?相关的知识,希望对你有一定的参考价值。

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

答案
  • 对于灰度图像:

    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。:如果您想进一步了解如何在不更改其他通道的情况下有效地将this thread的给定通道设置为给定值,请签出cv::Mat

另一答案

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 –分配给每个矩阵元素的标量。矩阵大小或类型不变。

另一答案

以其他方式可以使用

Mat::setTo

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

以上是关于如何将OpenCV Mat的所有像素设置为特定值?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 访问 MAT 对象中的 RGB 值

OpenCV用另一个值替换特定像素值

android opencv 如何获得特定像素点的颜色

如何在 OpenCV 中计算 Mat 的最大像素值 [重复]

仅考虑特定像素(而非完整图像)的OpenCV颜色直方图calcHist

如何获取和设置 EmguCV Mat 图像的像素值?