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

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



该文档也没有概述如何训练OpenCV的实现,因此我处于黑暗之中。

回顾一下,如何使用OpenCV实现?有训练有素的模型吗?如果没有,如何使用OpenCV训练一个?

最佳答案

您可以从opencv_extra ximgproc测试数据中使用this model

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

图片:

c++ - OpenCV的结构化边缘检测器的模型文件-LMLPHP

边缘:

c++ - OpenCV的结构化边缘检测器的模型文件-LMLPHP

码:

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

07-24 09:45
查看更多