Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
自由之枫~
opencv
提交
48c985e7
O
opencv
项目概览
自由之枫~
/
opencv
与 Fork 源项目一致
Fork自
OpenCV / opencv
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
48c985e7
编写于
10月 02, 2021
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20797 from sturkmen72:restore_LSD
上级
7358fffb
259c39a6
变更
4
展开全部
隐藏空白更改
内联
并排
Showing
4 changed file
with
1061 addition
and
18 deletion
+1061
-18
modules/imgproc/include/opencv2/imgproc.hpp
modules/imgproc/include/opencv2/imgproc.hpp
+9
-6
modules/imgproc/src/lsd.cpp
modules/imgproc/src/lsd.cpp
+979
-8
modules/imgproc/test/test_lsd.cpp
modules/imgproc/test/test_lsd.cpp
+0
-4
samples/cpp/lsd_lines.cpp
samples/cpp/lsd_lines.cpp
+73
-0
未找到文件。
modules/imgproc/include/opencv2/imgproc.hpp
浏览文件 @
48c985e7
...
...
@@ -1220,12 +1220,17 @@ protected:
//! @addtogroup imgproc_feature
//! @{
/** @example samples/cpp/lsd_lines.cpp
An example using the LineSegmentDetector
\image html building_lsd.png "Sample output image" width=434 height=300
*/
/** @brief Line segment detector class
following the algorithm described at @cite Rafael12 .
@note Implementation has been removed
due original code license conflict
@note Implementation has been removed
from OpenCV version 3.4.6 to 3.4.15 and version 4.1.0 to 4.5.3 due original code license conflict.
restored again after [Computation of a NFA](https://github.com/rafael-grompone-von-gioi/binomial_nfa) code published under the MIT license.
*/
class
CV_EXPORTS_W
LineSegmentDetector
:
public
Algorithm
{
...
...
@@ -1239,8 +1244,8 @@ public:
@param image A grayscale (CV_8UC1) input image. If only a roi needs to be selected, use:
`lsd_ptr-\>detect(image(roi), lines, ...); lines += Scalar(roi.x, roi.y, roi.x, roi.y);`
@param lines A vector of Vec4
i or Vec4
f elements specifying the beginning and ending point of a line. Where
Vec4
i/Vec4
f is (x1, y1, x2, y2), point 1 is the start, point 2 - end. Returned lines are strictly
@param lines A vector of Vec4f elements specifying the beginning and ending point of a line. Where
Vec4f is (x1, y1, x2, y2), point 1 is the start, point 2 - end. Returned lines are strictly
oriented depending on the gradient.
@param width Vector of widths of the regions, where the lines are found. E.g. Width of line.
@param prec Vector of precisions with which the lines are found.
...
...
@@ -1288,8 +1293,6 @@ to edit those, as to tailor it for their own application.
@param log_eps Detection threshold: -log10(NFA) \> log_eps. Used only when advance refinement is chosen.
@param density_th Minimal density of aligned region points in the enclosing rectangle.
@param n_bins Number of bins in pseudo-ordering of gradient modulus.
@note Implementation has been removed due original code license conflict
*/
CV_EXPORTS_W
Ptr
<
LineSegmentDetector
>
createLineSegmentDetector
(
int
refine
=
LSD_REFINE_STD
,
double
scale
=
0.8
,
...
...
modules/imgproc/src/lsd.cpp
浏览文件 @
48c985e7
此差异已折叠。
点击以展开。
modules/imgproc/test/test_lsd.cpp
浏览文件 @
48c985e7
...
...
@@ -5,8 +5,6 @@
namespace
opencv_test
{
namespace
{
#if 0 // LSD implementation has been removed due original code license issues
const
Size
img_size
(
640
,
480
);
const
int
LSD_TEST_SEED
=
0x134679
;
const
int
EPOCHS
=
20
;
...
...
@@ -404,6 +402,4 @@ TEST_F(Imgproc_LSD_Common, compareSegmentsVec4i)
ASSERT_EQ
(
result2
,
11
);
}
#endif
}}
// namespace
samples/cpp/lsd_lines.cpp
0 → 100644
浏览文件 @
48c985e7
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
using
namespace
std
;
using
namespace
cv
;
int
main
(
int
argc
,
char
**
argv
)
{
cv
::
CommandLineParser
parser
(
argc
,
argv
,
"{input i|building.jpg|input image}"
"{refine r|false|if true use LSD_REFINE_STD method, if false use LSD_REFINE_NONE method}"
"{canny c|false|use Canny edge detector}"
"{overlay o|false|show result on input image}"
"{help h|false|show help message}"
);
if
(
parser
.
get
<
bool
>
(
"help"
))
{
parser
.
printMessage
();
return
0
;
}
parser
.
printMessage
();
String
filename
=
samples
::
findFile
(
parser
.
get
<
String
>
(
"input"
));
bool
useRefine
=
parser
.
get
<
bool
>
(
"refine"
);
bool
useCanny
=
parser
.
get
<
bool
>
(
"canny"
);
bool
overlay
=
parser
.
get
<
bool
>
(
"overlay"
);
Mat
image
=
imread
(
filename
,
IMREAD_GRAYSCALE
);
if
(
image
.
empty
()
)
{
cout
<<
"Unable to load "
<<
filename
;
return
1
;
}
imshow
(
"Source Image"
,
image
);
if
(
useCanny
)
{
Canny
(
image
,
image
,
50
,
200
,
3
);
// Apply Canny edge detector
}
// Create and LSD detector with standard or no refinement.
Ptr
<
LineSegmentDetector
>
ls
=
useRefine
?
createLineSegmentDetector
(
LSD_REFINE_STD
)
:
createLineSegmentDetector
(
LSD_REFINE_NONE
);
double
start
=
double
(
getTickCount
());
vector
<
Vec4f
>
lines_std
;
// Detect the lines
ls
->
detect
(
image
,
lines_std
);
double
duration_ms
=
(
double
(
getTickCount
())
-
start
)
*
1000
/
getTickFrequency
();
std
::
cout
<<
"It took "
<<
duration_ms
<<
" ms."
<<
std
::
endl
;
// Show found lines
if
(
!
overlay
||
useCanny
)
{
image
=
Scalar
(
0
,
0
,
0
);
}
ls
->
drawSegments
(
image
,
lines_std
);
String
window_name
=
useRefine
?
"Result - standard refinement"
:
"Result - no refinement"
;
window_name
+=
useCanny
?
" - Canny edge detector used"
:
""
;
imshow
(
window_name
,
image
);
waitKey
();
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录