OpenCV избавиться от изолированных пикселей
Я пытаюсь удалить отдельные пиксели из изображения.
Я думал об использовании:
cvErode(img, img, 0, 1);
Проблема в том, что я хочу ядро:
0 0 0
0 1 0
0 0 0
Я не уверен, как это сделать. Кто-нибудь может помочь?
5 ответов
Перечитав заголовок вопроса, теперь я вижу, что вы хотите. Вы после морфологического оператора " попал или не попал", ядро, которое вы описали, на самом деле является квадратом 3х3, идеально подходящим для функции, которая выполняет удар или промах. Кажется, что OpenCV не поддерживает это, но вы можете выполнить то, что вам нужно, выполнив простой анализ каждой окрестности точки: если точка не связана с какой-либо другой точкой, удалите ее.
Вы можете отфильтровать изображение с помощью пользовательских ядер в opencv, используя функцию filter2D.
Посмотри документацию
Документы всегда являются хорошим источником для начала:)
Теперь вы устанавливаете ядро по умолчанию, передавая NULL в качестве третьего аргумента.
Вы должны использовать http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=erode и передавать выходные данные в качестве аргумента для функции эрозии.
Если вы не можете сгенерировать ваше ядро с помощью этой функции. Просто создайте элемент IplConvKernel вручную.
Если вы используете новый API OpenCV 2.x, вы можете сделать это следующим образом:
cv::Mat kernel = (cv::Mat_<uchar>(3,3) << 0, 0, 0,
0, 1, 0,
0, 0, 0);
cv::erode(img, img, kernel);
Вот мое событие в 5 центов, хотя я вообще не знаю openCV.
Но вы должны рассмотреть вопрос о поиске функции под названием "Открытие". Это в эрозии, сопровождаемой расширением. Это удалит маленький изолированный пиксель. Размер удаленных элементов будет зависеть от используемого вами ядра.
Другой вариант - найти функцию для фильтрации нижних частот изображения.
Что бы вы ни делали, все сводится к двум шагам. вызовите функцию для создания ядра. примените ядро к изображению, используя другую функцию.
Что бы ты не делал! Не просто используйте функцию "эрозии". Это также изменит элементы на оставшемся изображении. В этом случае вам обязательно следует использовать функцию "открытия".