Helping using the dilate function OpenCV

c++, function, image-processing, mathematical-morphology, opencv

Solution

There are examples all around Stack Overflow, like this:

int erosion_size = 6;   
cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS,
                      cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1), 
                      cv::Point(erosion_size, erosion_size) );

cv::dilate(edges, edges, element); 

Or this:

cv::dilate(edges, edges, cv::Mat(), cv::Point(-1,-1));

Problem

In the following code I want to use the `dilate` function but I don't know how to cast a `Mat` class into a `InputArray` and `OutputArray`. Can you help me? Using this prototype function: ``` void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() ) ``` Here's my code: ``` #include "opencv2/opencv.hpp" using namespace cv; int main(int, char**) { Mat edges; VideoCapture cap(0); // open the default camera if(!cap.isOpened()) // check if we succeeded return -1; for(;;) { Mat frame; cap >> frame; // get a new frame from camera cvtColor(frame, edges, CV_BGR2GRAY); GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); //dilate(edges,edges,NULL); Canny(edges, edges, 0, 30, 3); imshow("edges", frame); if(waitKey(30) >= 0) break; } // the camera will be deinitialized automatically in VideoCapture destructor return 0; } ```

Original source

Related problems