我的图片类型为CV_8UC1
。如何将所有像素值设置为特定值?
答案 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);
垫&安培; Mat :: operator =(const Scalar& s)
s - 为每个矩阵元素分配的标量。矩阵大小或类型不会更改。
答案 2 :(得分:3)