OpenCV结构化边缘检测器的模型文件

Nit*_*Nit 10 c++ opencv

OpenCV 基于P.Dollár和C. Zitnick 在"用于快速边缘检测的结构化森林"(2013)中概述的基于随机森林的方法实施StructuredEdgeDetection.作者已经发布了Matlab的实现,还有一个用于Python的实现,两者都包含基于BSDS500数据集的预训练模型.

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

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

该文档还没有概述如何训练OpenCV实现,所以我完全处于黑暗中.

总结一下,如何使用OpenCV实现?是否有训练有素的模型?如果没有,如何使用OpenCV训练一个?

Mik*_*iki 15

您可以从测试数据中使用此模型opencv_extra ximgproc.

如果您想训练自己的模型,可以按照OpenCV教程的说明进行操作.

图片:

在此输入图像描述

边:

在此输入图像描述

码:

#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;
}
Run Code Online (Sandbox Code Playgroud)