Как использовать функцию 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.