Обнаружение края цвета + opencv

В детекторе Canny Edge требуется серое изображение ...

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

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

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


person user671805    schedule 11.11.2011    source источник


Ответы (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));

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

Крис

person Chris    schedule 11.11.2011
comment
Я бы выполнил обнаружение краев отдельно для всех 3 цветовых каналов ПЕРЕД утонением: обнаружил края, выполнил операцию MAX на всех каналах, чтобы получить как можно больше краев, и только затем выполнить утонение и гистерезис. - person Ilya Suzdalnitski; 08.12.2013
comment
Привет, да, это гораздо лучший подход, но для его поддержки потребуется переписать хитрый метод. К сожалению, метод обнаружения краев opencv поддерживает только изображения в градациях серого и автоматически выполняет прореживание и определение пороговых значений гистерезиса. Адаптировать код opencv должно быть довольно легко, если я помню, как играл с ним, но, боюсь, у меня нет времени на тестирование и отправку исправления. - person Chris; 15.01.2014