OpenCV基于P.Dollár和C. Zitnick在StructuredEdgeDetection中概述的基于随机森林的方法实现"Structured Forests for Fast Edge Detection" (2013)。作者发表了an implementation for Matlab,还有one for Python,两者都包含基于BSDS500数据集的预训练模型。
OpenCV实现似乎缺少预先训练的模型,我也无法发现它提供的唯一构造函数所期望的格式:
Ptr<cv::StructuredEdgeDetection> createStructuredEdgeDetection(String model)
唯一可用的构造函数
参数:model - 模型文件名
该文档也没有概述如何训练OpenCV实现,所以我完全处于黑暗中。
总结一下,如何使用OpenCV实现?是否有训练有素的模型?如果没有,如何使用OpenCV训练一个?
答案 0 :(得分:15)
您可以使用opencv_extra
ximgproc
测试数据中的this model。
如果您想训练自己的模型,可以按照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;
}