【问题标题】:Helping using the dilate function OpenCV帮助使用扩张功能 OpenCV
【发布时间】:2012-06-25 00:11:52
【问题描述】:

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

使用这个原型函数:

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

【问题讨论】:

    标签: c++ function opencv image-processing mathematical-morphology


    【解决方案1】:

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

    【讨论】:

    • 你能解释一下最后一个是做什么的吗?
    • 函数的文档解释的很好。
    • -1,它在文档中有效,但您没有链接它,并且答案不符合 Stack Overflow 标准。链接自:stackoverflow.com/questions/how-to-answer -> msmvps.com/blogs/jon_skeet/archive/2009/02/17/… Code without an explanation is rarely useful, however. At least provide a sentence or two to explain what's going on.
    • 我知道您在上面的评论中的问题没有得到回答,我尊重您对此感到不安和否决的事实。另一方面,这个答案来自 2 年前,它是为了回答创建这个线程的人。从这个意义上说,我相信这个答案成功地解决了这个问题。答案有 3 行代码(1 个变量声明和 2 个方法调用),因此完全没有必要注释每一行的作用。也许我应该联系约翰并听取他对此事的意见......:P
    • 鉴于Stack Overflow 帖子旨在为其他用户提供未来价值,帖子的年龄和是否已被接受对于您是否决定编辑它没有任何影响.如果您觉得这个答案应该与这些原因分开保持原样(即,如果您还没有这样做,那么您会非常乐意发布这个答案,就像这个问题一样),这是一回事,但您可能不应该将这些原因作为推理的要点。
    【解决方案2】:

    在下面的代码中,我想使用扩张功能,但我没有 知道如何将 Mat 类转换为 InputArray 和 OutputArray。能 你帮我吗?

    好吧,您可以将Mat 用作Inputarray/Outputarray 参数而不进行强制转换。见official docs

    还有here's官方OpenCV腐蚀/延迟教程。或者,您可以使用 karlphillip 的 帖子中的示例。

    【讨论】:

    • 对于 Mat::copyTo 来说似乎不是这样,因为编译器抱怨:error: no matching function for call to ‘cv::Mat::copyTo(cv::Mat)’ note: candidates are: /usr/include/opencv2/core/core.hpp:1651:10: note: void cv::Mat::copyTo(cv::OutputArray) const
    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多