Генерация одноканальной маски
Учитывая многоканальное изображение (например, BGR), каков наиболее эффективный способ создания (двоичного) 1C
маска для равенства значений пикселей?
cv::compare()
работает только для одноканальных входных изображений.
С помощью op==
дает 3C
маска.
Я могу тогда reduce
это, но это похоже на расточительный второй проход.
Есть ли один-единственный способ сделать это?
1 ответ
Решение
Для многоканальных матриц вам необходимо использовать cv::inRange()
, который принимает одноканальные, 3-канальные или 4-канальные изображения как src
и принимает нижнюю и верхнюю границы цветов для сегментирования. Так как вы хотите проверить на равенство данного цвета, вам нужно пройти оба lower_bound
а также upper_bound
как то же скалярное значение.
cv::Scalar color = cv::Scalar(100, 200, 150);
cv::Mat mask;
cv::inRange(img, color, color, mask);