简介
在本教程中,您将学习如何使用结构化森林来检测图像中的边缘。
示例
image
image
image
image
image
image
image
image
image
image
image
image
- 注意
- 像 Canny 边缘检测器这样的二值化技术适用于由两种算法(Sobel 和 StructuredEdgeDetection::detectEdges)产生的边缘。
源代码
21int main(
int argc,
const char** argv )
24 parser.about(
"此示例演示了使用结构化森林进行快速边缘检测");
25 parser.printMessage();
27 if ( !parser.check() )
38 Mat image = imread(inFilename, IMREAD_COLOR);
43 if ( modelFilename.size() == 0)
54 createStructuredEdgeDetection(modelFilename);
58 std::cout <<
"createStructuredEdgeDetection() 时间: " << tm << std::endl;
64 pDollar->detectEdges(image, edges);
67 std::cout <<
"detectEdges() 时间: " << tm << std::endl;
74 pDollar->computeOrientation(edges, orientation_map);
78 pDollar->edgesNms(edges, orientation_map, edge_nms, 2, 0, 1,
true);
82 std::cout <<
"nms 时间: " << tm << std::endl;
85 if ( outFilename.size() == 0 )
87 imshow(
"edges", edges);
88 imshow(
"edges nms", edge_nms);
92 imwrite(outFilename, 255*edges);
如果数组没有元素,则返回 true。
int64_t int64
OpenCV 原始数据类型的模板“特征”类。
定义 traits.hpp:113
一个用于测量流逝时间的类。
定义 utility.hpp:326
void start()
开始计时。
定义 utility.hpp:335
void stop()
停止计时。
定义 utility.hpp:341
void reset()
重置内部值。
定义 utility.hpp:430
std::string String
定义 cvstd.hpp:151
std::shared_ptr< _Tp > Ptr
Definition cvstd_wrapper.hpp:23
#define CV_Error(code, msg)
调用错误处理程序。
定义 base.hpp:399
CV_EXPORTS_W bool imwrite(const String &filename, InputArray img, const std::vector< int > ¶ms=std::vector< int >())
将图像保存到指定文件。
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
说明
加载源彩色图像
Mat image =
imread(inFilename, IMREAD_COLOR);
if ( image.empty() )
将源图像转换为 float [0;1] 范围
运行主要算法
pDollar->detectEdges(image, edges);
pDollar->computeOrientation(edges, orientation_map);
pDollar->edgesNms(edges, orientation_map, edge_nms, 2, 0, 1, true);
显示结果
if ( outFilename.size() == 0 )
{
imshow(
"edges nms", edge_nms);
}
else
文献
有关更多信息,请参阅以下论文:[72] [171]