6

Trong đoạn mã sau tôi muốn sử dụng chức năng dilate nhưng tôi không biết cách đúc một lớp Mat thành InputArrayOutputArray. Bạn có thể giúp tôi được không?Giúp sử dụng chức năng giãn nở OpenCV

Sử dụng chức năng nguyên mẫu này:

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

Dưới đây là mã của tôi:

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

Trả lời

19

Có những ví dụ tất cả các xung quanh 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

Bạn có thể giải thích điều cuối cùng không? – Antonio

+0

Tài liệu của hàm này giải thích rõ. – karlphillip

+5

-1, nó có hiệu quả trong tài liệu, nhưng bạn không liên kết nó và như vậy câu trả lời không đáp ứng tiêu chuẩn Stack Overflow. Được liên kết từ: http://stackoverflow.com/questions/how-to-answer -> http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx ' Tuy nhiên, mã mà không có giải thích hiếm khi hữu ích. Ít nhất hãy cung cấp một hoặc hai câu để giải thích những gì đang diễn ra.' – 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?

Vâng, bạn có thể sử dụng Mat như Inputarray/Outputarray tham số, không bó bột. Xem official docs.

Và cũng có thể here's offificial Hướng dẫn xóa/xóa mã OpenCV. Hoặc bạn có thể sử dụng các mẫu từ bài đăng của karlphillip.

+0

Dường như không phải là trường hợp cho Mat :: copyTo, như trình biên dịch than phiền: 'lỗi: không có hàm phù hợp cho cuộc gọi đến 'cv :: Mat :: copyTo (cv :: Mat)' lưu ý: ứng cử viên là: /usr/include/opencv2/core/core.hpp:1651:10: lưu ý: void cv :: Mat :: copyTo (cv :: OutputArray) const' – pbond