简介
在本教程中,你将了解如何使用结构森林在图像中检测边缘。
示例
图像
图像
图像
图像
图像
图像
图像
图像
图像
图像
图像
图像
- 注意
- 二值化技术,如 Canny 边缘检测器适用于由两种算法(Sobel 和 StructuredEdgeDetection::detectEdges)生成的边缘。
源代码
16 "{i || input image file name}"
17 "{m || model file name}"
18 "{o || output image file name}"
21int main(
int argc,
const char** argv )
24 parser.about(
"此样本演示了如何使用用于快速边缘检测的结构化森林");
25 parser.printMessage();
27 如果 ( !parser.check() )
38 Mat image = imread(inFilename, IMREAD_COLOR);
43 如果 ( modelFilename.size() == 0)
54 createStructuredEdgeDetection(modelFilename);
58 std::cout <<
"createStructuredEdgeDetection() 时间: " << tm << std::endl;
64 pDollar->detectEdges(image, edges);
67 std::cout <<
"detectEdges() time : " << 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 time : " << tm << std::endl;
85 if ( outFilename.size() == 0 )
87 imshow(
"edges", edges);
88 imshow(
"edges nms", edge_nms);
92 imwrite(outFilename, 255*edges);
用于命令行解析。
定义 utility.hpp:820
OpenCV 原始数据类型的模板“特征”类。
定义 traits.hpp:113
用于测量经过时间的类。
定义 utility.hpp:295
void start()
开始计数刻度。
定义 utility.hpp:304
void stop()
停止计数刻度。
定义 utility.hpp:310
void reset()
重置内部值。
定义 utility.hpp:374
std::string String
定义 cvstd.hpp:151
std::shared_ptr< _Tp > Ptr
定义 cvstd_wrapper.hpp:23
#define CV_Error(code, msg)
调用错误处理程序。
定义 base.hpp:320
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
与一个文件系统上的文件关联的文件存储的“黑匣子”表示。
定义 core.hpp:102
说明
加载源彩色图像
Mat image = imread(inFilename, IMREAD_COLOR);
CV_Error(Error::StsError,
String(
"Cannot read image file: ") + inFilename);
bool empty() const
如果数组没有元素,则返回真。
将源图像转换为浮点数 [0;1] 范围
void convertTo(OutputArray m, int rtype, double alpha=1, double beta=0) const
将数组转换为另一种数据类型(可选缩放)。
运行主算法
createStructuredEdgeDetection(modelFilename);
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", edges);
imshow("edges nms", edge_nms);
waitKey(0);
}
else
imwrite(outFilename, 255*edges);
文献
更多信息,参考以下论文:[70] [168]