Intereting Posts

Как использовать функцию эрозии и расширения в opencv?

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

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

код:

#include  #include  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; } 

Согласно официальным документам , третьим аргументом должен быть kernel ​​(или элемент структурирования). Вы в настоящее время проходите 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); 

В этом случае будет использоваться kernel ​​3×3 по умолчанию.

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

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

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