6

W poniższym kodzie chcę użyć funkcji dilate, ale nie wiem jak rzucić klasę Mat w InputArray i OutputArray. Możesz mi pomóc?Pomoc w korzystaniu z funkcji rozszerzania OpenCV

Za pomocą tej funkcji prototype:

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

Oto mój kod:

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

Odpowiedz

19

Istnieją przykłady całym przepełnienie stosu, 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

Czy możesz wyjaśnić, co robi ostatni? – Antonio

+0

Dokumentacja funkcji wyjaśnia to dobrze. – karlphillip

+5

-1, jest efektywnie w dokumentacji, ale nie łączysz go i, że odpowiedź nie spełnia standardu Stack Overflow. Związane z: http://stackoverflow.com/questions/how-to-answer -> http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx Kod bez wyjaśnienia rzadko jest jednak przydatny. Przynajmniej podaj zdanie lub dwa, aby wyjaśnić, co się dzieje. " – 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?

Cóż, można użyć Mat jako Inputarray/Outputarray parametr bez odlewania. Zobacz official docs.

A także here's sztuczny kursor usuwania/usuwania z OpenCV. Lub możesz użyć próbek z postu karlphillipa.

+0

Wygląda na to, że Mat :: copyTo nie jest przypadkiem dla Mat :: copyTo, ponieważ kompilator narzeka: 'błąd: brak pasującej funkcji dla wywołania 'cv :: Mat :: copyTo (cv :: Mat)' uwaga: kandydatami są: /usr/include/opencv2/core/core.hpp:1651:10: note: void cv :: Mat :: copyTo (cv :: OutputArray) const' – pbond

Powiązane problemy