Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 帮助使用扩展函数OpenCV_C++_Function_Opencv_Image Processing_Mathematical Morphology - Fatal编程技术网

C++ 帮助使用扩展函数OpenCV

C++ 帮助使用扩展函数OpenCV,c++,function,opencv,image-processing,mathematical-morphology,C++,Function,Opencv,Image Processing,Mathematical Morphology,在下面的代码中,我想使用explate函数,但我不知道如何将Mat类强制转换为InputArray和OutputArray。你能帮我吗 使用此原型功能: void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=mo

在下面的代码中,我想使用
explate
函数,但我不知道如何将
Mat
类强制转换为
InputArray
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;
}

关于堆栈溢出,有很多例子:

:

在下面的代码中,我想使用deflate函数,但我不想使用 知道如何将Mat类转换为输入阵列和输出阵列。可以 你能帮我吗

您可以使用
Mat
作为
Inputarray
/
Outputarray
参数,而无需强制转换。看


以及官方OpenCV侵蚀/delate教程。或者您可以使用karlphillip的帖子中的样本

Mat::copyTo似乎不是这样,因为编译器抱怨:
错误:调用“cv::Mat::copyTo(cv::Mat)”没有匹配的函数。注意:候选函数是:/usr/include/opencv2/core/core.hpp:1651:10:注意:void cv::Mat::copyTo(cv::OutputArray)const
你能解释最后一个函数的作用吗?函数的文档很好地解释了它。-1,它在文档中有效,但你没有链接它,而且答案不符合堆栈溢出标准。然而,链接自:->
没有解释的代码很少有用。至少用一两句话来解释发生了什么事。
我知道你在上面评论中的问题没有得到回答,我尊重你对此感到不安并投了反对票的事实。另一方面,这个答案是2年前的,它是为了回答创建这个线程的人。从这个意义上说,我相信这个答案成功地解决了这个问题。答案有3行代码(1个变量声明和2个方法调用),因此完全没有必要注释每行代码的作用。也许我应该打电话给约翰,接受他对这件事的质疑…:p如果帖子旨在为其他用户提供未来价值,那么帖子的年龄以及是否被接受都不应影响您是否决定编辑它。如果你觉得这个答案应该保持原样,而不是那些原因(即,如果你还没有这样做的话,你会非常乐意把这个答案张贴到这个问题上),这是一件事,但是你可能不应该把这些原因作为你推理的要点。
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));