【问题标题】:Model file for OpenCV's structured edge detectorOpenCV 结构化边缘检测器的模型文件
【发布时间】:2017-08-04 10:41:12
【问题描述】:

OpenCV 基于 P. Dollár 和 C. Zitnick 在 "Structured Forests for Fast Edge Detection" (2013) 中概述的基于随机森林的方法实现 StructuredEdgeDetection。作者发布了an implementation for Matlab,还有one for Python,两者都包含基于BSDS500数据集的预训练模型。

OpenCV 实现似乎缺少预训练模型,我也无法发现它提供的唯一构造函数所期望的格式:

Ptr<cv::StructuredEdgeDetection> createStructuredEdgeDetection(String model)
唯一可用的构造函数
参数:model – 模型文件名

文档也没有概述如何训练 OpenCV 实现,所以我一无所知。

回顾一下,如何使用 OpenCV 实现?是否有可用的训练模型?如果没有,如何使用 OpenCV 进行训练?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    您可以使用this model 来自opencv_extra ximgproc 测试数据。

    如果您想训练自己的模型,可以按照OpenCV tutorials 上的说明进行操作。

    图片:

    边缘:

    代码:

    #include <opencv2\opencv.hpp>
    #include <opencv2\ximgproc.hpp>
    
    using namespace cv;
    using namespace cv::ximgproc;
    
    int main()
    {
        Ptr<StructuredEdgeDetection> pDollar = createStructuredEdgeDetection("path_to_model.yml.gz");
    
        Mat3b src = imread("path_to_image");
    
        Mat3f fsrc;
        src.convertTo(fsrc, CV_32F, 1.0 / 255.0);
    
        Mat1f edges;
        pDollar->detectEdges(fsrc, edges);
    
        imshow("Image", src);
        imshow("Edges", edges);
        waitKey();
    
        return 0;
    }
    

    【讨论】:

    • 非常感谢您的帮助,似乎信息可用,只是很难找到,因为它的结构不是很清楚。
    • 对于具有40kb 大小的190x480px 图像来说这需要30-40 秒是否正常?
    • 我调试并检查了......完成createStructuredEdgeDetection() 步骤需要30 秒。我使用的是您指定的相同型号。
    • @mrid 不,太多了。确保您在发布中运行并检查构建优化
    • @Miki 刚刚检查过,现在好多了 - 现在大多数图像需要 3-4 秒 :) 但是对于某些图像,它会在 src.convertTo(fsrc.... 线上抛出 AccessViolationException。知道是什么原因造成的吗?
    猜你喜欢
    • 2018-12-30
    • 2019-10-03
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多