Как использовать функцию erode и dilate в opencv?

Я пытаюсь устранить вещь вокруг числа с процессом размывания и расширения. Я попытался, но ничего не вышло. Я изменил значения только для того, чтобы увидеть, изменит ли что-то, но опять же ничего не изменилось. Изображение продолжается, как в ссылке выше. Как насчет этих параметров... Я прочитал документацию, но не совсем понимаю (как вы можете видеть, я угадывал в функции). Что я делаю не так?

изображение: https://docs.google.com/file/d/0BzUNc6BOkYrNeVhYUk1oQjFSQTQ/edit?usp=sharing

код:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main ( int argc, char **argv )
{
    Mat im_gray;
    Mat img_bw;
    Mat img_final;

    Mat im_rgb  = imread("cam.jpg");
    cvtColor(im_rgb,im_gray,CV_RGB2GRAY);


    adaptiveThreshold(im_gray, img_bw, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY_INV, 105, 1); 


    dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1);


    imwrite("cam_final.jpg", img_final);

    return 0;
}  

2 ответов


по данным официальные документы, третьим аргументом должно быть ядро (или элемент структурирования). В настоящее время вы проходите 0:

dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1);

попробуйте переписать его таким образом:

dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1);

в этом случае будет использоваться ядро по умолчанию 3x3.


ядро-это в основном матрица. Это умножается или перекрывается на входной матрице(изображении) для получения желаемого выхода модифицированной(в данном случае расширенной) матрицы (изображения).

попробуйте изменить параметры Mat() in dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1); вы в основном меняете количество пикселей (высоту и ширину) ядра, что изменит эффект расширения на исходном рисунке.

так в параметрах dilate вы используете Mat() вместо числа, как уже указано esenti.