#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 должно быть довольно легко, если я помню, что играл с ним, но, боюсь, у меня нет времени на тестирование и отправку изменений.