Генерация одноканальной маски

Учитывая многоканальное изображение (например, 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);
Другие вопросы по тегам