Реализация imclose (IM, SE) в opencv

Я хочу определить фон следующего изображения, на переднем плане которого всегда много черных точек:

img.png

введите здесь описание изображения

Кто-то выполняет морфологическое замыкание изображения дискообразным структурирующим элементом и получает хороший результат:

введите здесь описание изображения

Код Matlab:

img = imread('c:\img.png');
bg = imclose(img, strel('disk', 15));
figure('name', 'bg'), imshow(bg);

Итак, как реализовать imclose(IM, SE) в opencv, чтобы заменить работу в MATLAB, или есть другой лучший способ обнаружить такой фон с помощью метода opencv?


person WangYudong    schedule 20.08.2013    source источник


Ответы (1)


Вы можете использовать cv::getStructuringElement() для создания эллиптического структурирующего элемента и cv::morphologyEx() для выполнения операции закрытия.

cv::morphologyEx(img, img, cv::MORPH_CLOSE, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(21,21)));

Мне пришлось немного изменить размер элемента структурирования, чтобы получить результаты, аналогичные вашему примеру MATLAB:

Закрытое изображение

Поскольку вас, кажется, интересуют морфологические операции с OpenCV, я рекомендую вам предоставить документацию чтение, чтобы увидеть, на что все это способно.

person Aurelius    schedule 20.08.2013
comment
Приятно видеть вас снова. Спасибо за ответ и рекомендацию - person WangYudong; 20.08.2013