Определение границ цвета opencv

#image-processing #opencv #emgucv

#обработка изображений #opencv #emgucv

Вопрос:

В детекторе краев canny требуется ввод серого изображения…

Есть ли какая-либо функция прямого определения границ цвета в open-cv? Или это то же самое, если я конвертирую в шкалу серого и использую canny?

Я спрашиваю об этом, потому что мне нужно увидеть карту определения границ цветного изображения для дальнейшей обработки… То есть мне нужно вычислить все горизонтальные и вертикальные отрезки в цветном изображении… Таким образом, я думал сначала вычислить все границы изображения…

Может кто-нибудь помочь мне, как я должен прогрессировать…

Ответ №1:

Маттиас Одизио прав, спасибо, что вы даже поправили меня, и вы очень хорошо объяснили причину. Тогда решением было бы выполнить определение границ для каждого цветового спектра:

  Image<Bgr, Byte> img  = new Image<Bgr, Byte>(open.FileName);
 Image<Bgr, Byte> Result = new Image<Bgr, Byte>(img.Size);
 Result[0] = img[0].Canny(new Gray(10), new Gray(60));
 Result[1] = img[0].Canny(new Gray(10), new Gray(60));
 Result[2] = img[0].Canny(new Gray(10), new Gray(60));
  

Надеюсь, это поможет,

Крис

Комментарии:

1. Я бы выполнил определение границ отдельно для всех 3 цветовых каналов ПЕРЕД утоньшением: обнаружил края, выполнил МАКСИМАЛЬНУЮ операцию на всех каналах, чтобы получить как можно больше краев, и только затем выполнил утоньшение и гистерезис.

2. Привет, да, это гораздо лучший подход, но для его поддержки потребуется переписать метод canny. К сожалению, метод определения границ opencv canny поддерживает только изображения в оттенках серого и автоматически выполняет прореживание и установление порога гистерезиса. Адаптировать код opencv должно быть довольно легко, если я помню, что играл с ним, но, боюсь, у меня нет времени на тестирование и отправку изменений.