Сглаживание контура с помощью справочной таблицы/отображения уровней (OpenCV)

Пытаюсь сгладить неровные контуры, нарисованные методом OpenCV's drawContours(). Я применяю размытие по Гауссу к контуру, а затем пытаюсь использовать справочную таблицу для сопоставления интенсивности пикселей.

Однако я не знаю, какие значения использовать в моей таблице поиска. Сейчас я просто угадываю произвольные числа. Я собрал небольшой макет: первые два изображения — результаты непосредственно из OpenCV. Последнее изображение достигается с помощью функции уровней Photoshop. Как видите, стало мягче.

Как узнать, какие значения использовать в моей справочной таблице?

std::vector<char> lut(256);
for (int i = 0; i <= 255; ++i) {

    if(i >= 75) lut[i] = 255;
    else if (i <= 25) lut[i] = 0;
    else if (i < 75 && i > 25) lut[i] = i;


}

cv::LUT(contoursOverlay, lut, contoursOverlay);

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


person user339946    schedule 11.04.2015    source источник


Ответы (1)


Думали ли вы применить только фильтр расширения (и, возможно, затем размытие): http://docs.opencv.org/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html

Это может быть проще и лучше решение. В вашем случае я сомневаюсь, что в этом случае есть хорошая практика. Я не уверен, что это хорошее решение.

person Tom A    schedule 11.04.2015