У меня есть изображение типа CV_8UC1
. Как установить все значения пикселей на определенное значение?
Как установить все пиксели матрицы OpenCV на определенное значение?
Ответ 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
По-другому вы можете использовать
Как
Mat src(480,640,CV_8UC1);
src.setTo(123); //assign 123