6

В следующем коде я хочу использовать функцию dilate, но я не знаю, как отличить класс Mat в InputArray и OutputArray. Вы можете мне помочь?Помощь в использовании расширенной функции OpenCV

С помощью этой функции прототипа:

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

Вот мой код:

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

ответ

19

Есть примеры вокруг 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)); 
+0

Можете ли вы объяснить, что делает последний? – Antonio

+0

Документация функции объясняет это хорошо. – karlphillip

+5

-1, это эффективно в документации, но вы не связываете его, и, как будто ответ не удовлетворяет стандарту стека переполнения. Связано с: http://stackoverflow.com/questions/how-to-answer -> http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx ' Однако код без объяснения редко бывает полезен. По крайней мере, предоставьте предложение или два, чтобы объяснить, что происходит. « – 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?

Ну, вы можете использовать Mat как Inputarray/Outputarray параметр без литья. См. official docs.

А также here's Исходный учебник по размыванию/delate OpenCV. Или вы можете использовать образцы от karlphillip's.

+0

Не похоже на то, что для Mat :: copyTo, как компилятор жалуется: 'error: no matching function for call to 'cv :: Mat :: copyTo (cv :: Mat)' Примечание: кандидат: /usr/include/opencv2/core/core.hpp:1651:10: note: void cv :: Mat :: copyTo (cv :: OutputArray) const' – pbond

 Смежные вопросы

  • Нет связанных вопросов^_^