6

在下面的代码中,我想使用该dilate函数,但我不知道如何将一个Mat类转换为InputArrayand OutputArray。你能帮助我吗?

使用这个原型函数:

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

2 回答 2

19

Stack Overflow 周围有很多例子,像这样

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); 

或者这个

cv::dilate(edges, edges, cv::Mat(), cv::Point(-1,-1));
于 2012-06-25T00:23:10.240 回答
2

在下面的代码中,我想使用 dilate 函数,但我不知道如何将 Mat 类转换为 InputArray 和 OutputArray。你能帮助我吗?

好吧,您可以使用Matas Inputarray/Outputarray参数而不进行强制转换。见官方文档

还有这里的官方 OpenCV 侵蚀/延迟教程。或者,您可以使用karlphillip帖子中的示例。

于 2012-06-25T08:37:26.207 回答