6

En el siguiente código deseo usar la función dilate pero no sé cómo convertir una clase Mat en InputArray y OutputArray. ¿Me puedes ayudar?Ayuda con el uso de la función dilatar OpenCV

Con esta función prototipo:

void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue()) 

Aquí está mi código:

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

Respuesta

19

Hay ejemplos en todo el desbordamiento de pila, 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)); 
+0

¿Puede explicarnos qué hace el último? – Antonio

+0

La documentación de la función lo explica bien. – karlphillip

+5

-1, está efectivamente en la documentación, pero no la está enlazando y, por lo tanto, la respuesta no cumple con el estándar de desbordamiento de pila. Vinculado desde: http://stackoverflow.com/questions/how-to-answer -> http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx ' Sin embargo, el código sin una explicación raramente es útil. Por lo menos, proporcione una o dos oraciones para explicar lo que está sucediendo. – Antonio

2

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?

Bueno, se puede utilizar como MatInputarray/Outputarray parámetro sin fundición. Ver official docs.

Y también here's oficio OpenCV erode/delate tutorial. O puede puede utilizar muestras de karlphillip's publicación.

+0

No parece ser el caso de Mat :: copyTo, como el compilador se queja: 'error: no hay función de coincidencia para llamar a 'cv :: Mat :: copyTo (cv :: Mat)' nota: los candidatos son: /usr/include/opencv2/core/core.hpp:1651:10: nota: void cv :: Mat :: copyTo (cv :: OutputArray) const' – pbond

Cuestiones relacionadas