如何在opencv中使用erode和dilate功能?

U23*_*23r 9 c++ opencv image

我试图通过侵蚀和扩张过程消除数字周围的事物.我试过但没有发生任何事.我改变了值只是为了看看是否会改变一些东西,但同样,没有任何改变.图像继续如上面的链接.这些参数怎么样......我阅读了文档,但不太明白(正如你所看到的,我在猜测函数).我究竟做错了什么?

图片: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;
}  
Run Code Online (Sandbox Code Playgroud)

Ese*_*nti 17

根据官方文档,第三个参数应该是内核(或结构元素).您目前正在通过0:

dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1);
Run Code Online (Sandbox Code Playgroud)

尝试这样重写:

dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将使用默认的3x3内核.

  • @Anne那构造一个空的`cv :: Mat`.根据文档,"如果`element = Mat()`,则使用3 x 3矩形结构元素." (4认同)