Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
004801f1
O
Opencv
项目概览
Greenplum
/
Opencv
10 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
004801f1
编写于
6月 19, 2023
作者:
A
Alexander Smorkalov
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/3.4' into merge-3.4
上级
f2f00259
ddcbd2cc
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
114 addition
and
22 deletion
+114
-22
apps/createsamples/utility.cpp
apps/createsamples/utility.cpp
+3
-2
modules/core/include/opencv2/core/optim.hpp
modules/core/include/opencv2/core/optim.hpp
+5
-0
modules/core/src/lpsolver.cpp
modules/core/src/lpsolver.cpp
+18
-2
modules/core/test/test_lpsolver.cpp
modules/core/test/test_lpsolver.cpp
+14
-0
modules/imgproc/src/distransform.cpp
modules/imgproc/src/distransform.cpp
+17
-14
modules/imgproc/test/test_distancetransform.cpp
modules/imgproc/test/test_distancetransform.cpp
+42
-0
modules/videoio/src/cap_ffmpeg_impl.hpp
modules/videoio/src/cap_ffmpeg_impl.hpp
+1
-1
platforms/ios/cmake/Toolchains/common-ios-toolchain.cmake
platforms/ios/cmake/Toolchains/common-ios-toolchain.cmake
+14
-3
未找到文件。
apps/createsamples/utility.cpp
浏览文件 @
004801f1
...
...
@@ -70,7 +70,7 @@ using namespace cv;
static
int
icvMkDir
(
const
char
*
filename
)
{
char
path
[
PATH_MAX
];
char
path
[
PATH_MAX
+
1
];
char
*
p
;
int
pos
;
...
...
@@ -83,7 +83,8 @@ static int icvMkDir( const char* filename )
mode
=
0755
;
#endif
/* _WIN32 */
strcpy
(
path
,
filename
);
path
[
0
]
=
'\0'
;
strncat
(
path
,
filename
,
PATH_MAX
);
p
=
path
;
for
(
;
;
)
...
...
modules/core/include/opencv2/core/optim.hpp
浏览文件 @
004801f1
...
...
@@ -256,6 +256,7 @@ public:
//! return codes for cv::solveLP() function
enum
SolveLPResult
{
SOLVELP_LOST
=
-
3
,
//!< problem is feasible, but solver lost solution due to floating-point arithmetic errors
SOLVELP_UNBOUNDED
=
-
2
,
//!< problem is unbounded (target function can achieve arbitrary high values)
SOLVELP_UNFEASIBLE
=
-
1
,
//!< problem is unfeasible (there are no points that satisfy all the constraints imposed)
SOLVELP_SINGLE
=
0
,
//!< there is only one maximum for target function
...
...
@@ -291,8 +292,12 @@ in the latter case it is understood to correspond to \f$c^T\f$.
and the remaining to \f$A\f$. It should contain 32- or 64-bit floating point numbers.
@param z The solution will be returned here as a column-vector - it corresponds to \f$c\f$ in the
formulation above. It will contain 64-bit floating point numbers.
@param constr_eps allowed numeric disparity for constraints
@return One of cv::SolveLPResult
*/
CV_EXPORTS_W
int
solveLP
(
InputArray
Func
,
InputArray
Constr
,
OutputArray
z
,
double
constr_eps
);
/** @overload */
CV_EXPORTS_W
int
solveLP
(
InputArray
Func
,
InputArray
Constr
,
OutputArray
z
);
//! @}
...
...
modules/core/src/lpsolver.cpp
浏览文件 @
004801f1
...
...
@@ -90,7 +90,7 @@ static void swap_columns(Mat_<double>& A,int col1,int col2);
#define SWAP(type,a,b) {type tmp=(a);(a)=(b);(b)=tmp;}
//return codes:-2 (no_sol - unbdd),-1(no_sol - unfsbl), 0(single_sol), 1(multiple_sol=>least_l2_norm)
int
solveLP
(
InputArray
Func_
,
InputArray
Constr_
,
OutputArray
z_
)
int
solveLP
(
InputArray
Func_
,
InputArray
Constr_
,
OutputArray
z_
,
double
constr_eps
)
{
dprintf
((
"call to solveLP
\n
"
));
...
...
@@ -143,9 +143,25 @@ int solveLP(InputArray Func_, InputArray Constr_, OutputArray z_)
}
z
.
copyTo
(
z_
);
//check constraints feasibility
Mat
prod
=
Constr
(
Rect
(
0
,
0
,
Constr
.
cols
-
1
,
Constr
.
rows
))
*
z
;
Mat
constr_check
=
Constr
.
col
(
Constr
.
cols
-
1
)
-
prod
;
double
min_value
=
0.0
;
minMaxIdx
(
constr_check
,
&
min_value
);
if
(
min_value
<
-
constr_eps
)
{
return
SOLVELP_LOST
;
}
return
res
;
}
int
solveLP
(
InputArray
Func
,
InputArray
Constr
,
OutputArray
z
)
{
return
solveLP
(
Func
,
Constr
,
z
,
1e-12
);
}
static
int
initialize_simplex
(
Mat_
<
double
>&
c
,
Mat_
<
double
>&
b
,
double
&
v
,
vector
<
int
>&
N
,
vector
<
int
>&
B
,
vector
<
unsigned
int
>&
indexToRow
){
N
.
resize
(
c
.
cols
);
N
[
0
]
=
0
;
...
...
@@ -255,7 +271,7 @@ static int initialize_simplex(Mat_<double>& c, Mat_<double>& b,double& v,vector<
static
int
inner_simplex
(
Mat_
<
double
>&
c
,
Mat_
<
double
>&
b
,
double
&
v
,
vector
<
int
>&
N
,
vector
<
int
>&
B
,
vector
<
unsigned
int
>&
indexToRow
){
for
(;;){
static
MatIterator_
<
double
>
pos_ptr
;
MatIterator_
<
double
>
pos_ptr
;
int
e
=-
1
,
pos_ctr
=
0
,
min_var
=
INT_MAX
;
bool
all_nonzero
=
true
;
for
(
pos_ptr
=
c
.
begin
();
pos_ptr
!=
c
.
end
();
pos_ptr
++
,
pos_ctr
++
){
...
...
modules/core/test/test_lpsolver.cpp
浏览文件 @
004801f1
...
...
@@ -151,4 +151,18 @@ TEST(Core_LPSolver, issue_12337)
EXPECT_ANY_THROW
(
Mat1b
z_8u
;
cv
::
solveLP
(
A
,
B
,
z_8u
));
}
// NOTE: Test parameters found experimentally to get numerically inaccurate result.
// The test behaviour may change after algorithm tuning and may removed.
TEST
(
Core_LPSolver
,
issue_12343
)
{
Mat
A
=
(
cv
::
Mat_
<
double
>
(
4
,
1
)
<<
3.
,
3.
,
3.
,
4.
);
Mat
B
=
(
cv
::
Mat_
<
double
>
(
4
,
5
)
<<
0.
,
1.
,
4.
,
4.
,
3.
,
3.
,
1.
,
2.
,
2.
,
3.
,
4.
,
4.
,
0.
,
1.
,
4.
,
4.
,
0.
,
4.
,
1.
,
4.
);
Mat
z
;
int
result
=
cv
::
solveLP
(
A
,
B
,
z
);
EXPECT_EQ
(
SOLVELP_LOST
,
result
);
}
}}
// namespace
modules/imgproc/src/distransform.cpp
浏览文件 @
004801f1
...
...
@@ -448,7 +448,7 @@ static void getDistanceTransformMask( int maskType, float *metrics )
struct
DTColumnInvoker
:
ParallelLoopBody
{
DTColumnInvoker
(
const
Mat
*
_src
,
Mat
*
_dst
,
const
int
*
_sat_tab
,
const
floa
t
*
_sqr_tab
)
DTColumnInvoker
(
const
Mat
*
_src
,
Mat
*
_dst
,
const
int
*
_sat_tab
,
const
in
t
*
_sqr_tab
)
{
src
=
_src
;
dst
=
_dst
;
...
...
@@ -481,7 +481,7 @@ struct DTColumnInvoker : ParallelLoopBody
{
dist
=
dist
+
1
-
sat_tab
[
dist
-
d
[
j
]];
d
[
j
]
=
dist
;
dptr
[
0
]
=
sqr_tab
[
dist
];
dptr
[
0
]
=
(
float
)
sqr_tab
[
dist
];
}
}
}
...
...
@@ -489,12 +489,12 @@ struct DTColumnInvoker : ParallelLoopBody
const
Mat
*
src
;
Mat
*
dst
;
const
int
*
sat_tab
;
const
floa
t
*
sqr_tab
;
const
in
t
*
sqr_tab
;
};
struct
DTRowInvoker
:
ParallelLoopBody
{
DTRowInvoker
(
Mat
*
_dst
,
const
floa
t
*
_sqr_tab
,
const
float
*
_inv_tab
)
DTRowInvoker
(
Mat
*
_dst
,
const
in
t
*
_sqr_tab
,
const
float
*
_inv_tab
)
{
dst
=
_dst
;
sqr_tab
=
_sqr_tab
;
...
...
@@ -529,7 +529,7 @@ struct DTRowInvoker : ParallelLoopBody
for
(;;
k
--
)
{
p
=
v
[
k
];
float
s
=
(
fq
+
sqr_tab
[
q
]
-
d
[
p
]
-
sqr_tab
[
p
]
)
*
inv_tab
[
q
-
p
];
float
s
=
(
fq
-
d
[
p
]
+
(
sqr_tab
[
q
]
-
sqr_tab
[
p
])
)
*
inv_tab
[
q
-
p
];
if
(
s
>
z
[
k
]
)
{
k
++
;
...
...
@@ -552,28 +552,28 @@ struct DTRowInvoker : ParallelLoopBody
}
Mat
*
dst
;
const
floa
t
*
sqr_tab
;
const
in
t
*
sqr_tab
;
const
float
*
inv_tab
;
};
static
void
trueDistTrans
(
const
Mat
&
src
,
Mat
&
dst
)
{
const
float
inf
=
1e15
f
;
const
int
inf
=
INT_MAX
;
CV_Assert
(
src
.
size
()
==
dst
.
size
()
);
CV_Assert
(
src
.
type
()
==
CV_8UC1
&&
dst
.
type
()
==
CV_32FC1
);
int
i
,
m
=
src
.
rows
,
n
=
src
.
cols
;
cv
::
AutoBuffer
<
uchar
>
_buf
(
std
::
max
(
m
*
2
*
sizeof
(
floa
t
)
+
(
m
*
3
+
1
)
*
sizeof
(
int
),
n
*
2
*
sizeof
(
float
)));
cv
::
AutoBuffer
<
uchar
>
_buf
(
std
::
max
(
m
*
2
*
sizeof
(
in
t
)
+
(
m
*
3
+
1
)
*
sizeof
(
int
),
n
*
2
*
sizeof
(
float
)));
// stage 1: compute 1d distance transform of each column
float
*
sqr_tab
=
(
floa
t
*
)
_buf
.
data
();
int
*
sqr_tab
=
(
in
t
*
)
_buf
.
data
();
int
*
sat_tab
=
cv
::
alignPtr
((
int
*
)(
sqr_tab
+
m
*
2
),
sizeof
(
int
));
int
shift
=
m
*
2
;
for
(
i
=
0
;
i
<
m
;
i
++
)
sqr_tab
[
i
]
=
(
float
)(
i
*
i
)
;
sqr_tab
[
i
]
=
i
*
i
;
for
(
i
=
m
;
i
<
m
*
2
;
i
++
)
sqr_tab
[
i
]
=
inf
;
for
(
i
=
0
;
i
<
shift
;
i
++
)
...
...
@@ -584,13 +584,14 @@ trueDistTrans( const Mat& src, Mat& dst )
cv
::
parallel_for_
(
cv
::
Range
(
0
,
n
),
cv
::
DTColumnInvoker
(
&
src
,
&
dst
,
sat_tab
,
sqr_tab
),
src
.
total
()
/
(
double
)(
1
<<
16
));
// stage 2: compute modified distance transform for each row
float
*
inv_tab
=
sqr_tab
+
n
;
float
*
inv_tab
=
(
float
*
)
sqr_tab
+
n
;
inv_tab
[
0
]
=
sqr_tab
[
0
]
=
0.
f
;
inv_tab
[
0
]
=
0.
f
;
sqr_tab
[
0
]
=
0
;
for
(
i
=
1
;
i
<
n
;
i
++
)
{
inv_tab
[
i
]
=
(
float
)(
0.5
/
i
);
sqr_tab
[
i
]
=
(
float
)(
i
*
i
)
;
sqr_tab
[
i
]
=
i
*
i
;
}
cv
::
parallel_for_
(
cv
::
Range
(
0
,
m
),
cv
::
DTRowInvoker
(
&
dst
,
sqr_tab
,
inv_tab
));
...
...
@@ -750,7 +751,9 @@ void cv::distanceTransform( InputArray _src, OutputArray _dst, OutputArray _labe
CV_IPP_CHECK
()
{
#if IPP_DISABLE_PERF_TRUE_DIST_MT
if
(
cv
::
getNumThreads
()
<=
1
||
(
src
.
total
()
<
(
int
)(
1
<<
14
)))
// IPP uses floats, but 4097 cannot be squared into a float
if
((
cv
::
getNumThreads
()
<=
1
||
(
src
.
total
()
<
(
int
)(
1
<<
14
)))
&&
src
.
rows
<
4097
&&
src
.
cols
<
4097
)
#endif
{
IppStatus
status
;
...
...
modules/imgproc/test/test_distancetransform.cpp
浏览文件 @
004801f1
...
...
@@ -302,4 +302,46 @@ BIGDATA_TEST(Imgproc_DistanceTransform, large_image_12218)
EXPECT_EQ
(
nz
,
(
size
.
height
*
size
.
width
/
2
));
}
TEST
(
Imgproc_DistanceTransform
,
wide_image_22732
)
{
Mat
src
=
Mat
::
zeros
(
1
,
4099
,
CV_8U
);
// 4099 or larger used to be bad
Mat
dist
(
src
.
rows
,
src
.
cols
,
CV_32F
);
distanceTransform
(
src
,
dist
,
DIST_L2
,
DIST_MASK_PRECISE
,
CV_32F
);
int
nz
=
countNonZero
(
dist
);
EXPECT_EQ
(
nz
,
0
);
}
TEST
(
Imgproc_DistanceTransform
,
large_square_22732
)
{
Mat
src
=
Mat
::
zeros
(
8000
,
8005
,
CV_8U
),
dist
;
distanceTransform
(
src
,
dist
,
DIST_L2
,
DIST_MASK_PRECISE
,
CV_32F
);
int
nz
=
countNonZero
(
dist
);
EXPECT_EQ
(
dist
.
size
(),
src
.
size
());
EXPECT_EQ
(
dist
.
type
(),
CV_32F
);
EXPECT_EQ
(
nz
,
0
);
Point
p0
(
src
.
cols
-
1
,
src
.
rows
-
1
);
src
.
setTo
(
1
);
src
.
at
<
uchar
>
(
p0
)
=
0
;
distanceTransform
(
src
,
dist
,
DIST_L2
,
DIST_MASK_PRECISE
,
CV_32F
);
EXPECT_EQ
(
dist
.
size
(),
src
.
size
());
EXPECT_EQ
(
dist
.
type
(),
CV_32F
);
bool
first
=
true
;
int
nerrs
=
0
;
for
(
int
y
=
0
;
y
<
dist
.
rows
;
y
++
)
for
(
int
x
=
0
;
x
<
dist
.
cols
;
x
++
)
{
float
d
=
dist
.
at
<
float
>
(
y
,
x
);
double
dx
=
(
double
)(
x
-
p0
.
x
),
dy
=
(
double
)(
y
-
p0
.
y
);
float
d0
=
(
float
)
sqrt
(
dx
*
dx
+
dy
*
dy
);
if
(
std
::
abs
(
d0
-
d
)
>
1
)
{
if
(
first
)
{
printf
(
"y=%d, x=%d. dist_ref=%.2f, dist=%.2f
\n
"
,
y
,
x
,
d0
,
d
);
first
=
false
;
}
nerrs
++
;
}
}
EXPECT_EQ
(
0
,
nerrs
)
<<
"reference distance map is different from computed one at "
<<
nerrs
<<
" pixels
\n
"
;
}
}}
// namespace
modules/videoio/src/cap_ffmpeg_impl.hpp
浏览文件 @
004801f1
...
...
@@ -1847,7 +1847,7 @@ int64_t CvCapture_FFMPEG::get_bitrate() const
double
CvCapture_FFMPEG
::
get_fps
()
const
{
#if
0 &&
LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(55, 1, 100) && LIBAVFORMAT_VERSION_MICRO >= 100
#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(55, 1, 100) && LIBAVFORMAT_VERSION_MICRO >= 100
double
fps
=
r2d
(
av_guess_frame_rate
(
ic
,
ic
->
streams
[
video_stream
],
NULL
));
#else
double
fps
=
r2d
(
ic
->
streams
[
video_stream
]
->
avg_frame_rate
);
...
...
platforms/ios/cmake/Toolchains/common-ios-toolchain.cmake
浏览文件 @
004801f1
...
...
@@ -101,8 +101,17 @@ if(NOT DEFINED IPHONEOS_DEPLOYMENT_TARGET AND NOT MAC_CATALYST)
endif
()
if
(
NOT __IN_TRY_COMPILE
)
set
(
_xcodebuild_wrapper
"
${
CMAKE_BINARY_DIR
}
/xcodebuild_wrapper"
)
if
(
NOT EXISTS
"
${
_xcodebuild_wrapper
}
"
)
set
(
_xcodebuild_wrapper
""
)
if
(
NOT
(
CMAKE_VERSION VERSION_LESS
"3.25.1"
))
# >= 3.25.1
# no workaround is required (#23156)
elseif
(
NOT
(
CMAKE_VERSION VERSION_LESS
"3.25.0"
))
# >= 3.25.0 < 3.25.1
if
(
NOT OPENCV_SKIP_MESSAGE_ISSUE_23156
)
message
(
FATAL_ERROR
"OpenCV: Please upgrade CMake to 3.25.1+. Current CMake version is
${
CMAKE_VERSION
}
. Details: https://github.com/opencv/opencv/issues/23156"
)
endif
()
else
()
# < 3.25.0, apply workaround from #13912
set
(
_xcodebuild_wrapper
"
${
CMAKE_BINARY_DIR
}
/xcodebuild_wrapper"
)
endif
()
if
(
_xcodebuild_wrapper AND NOT EXISTS
"
${
_xcodebuild_wrapper
}
"
)
set
(
_xcodebuild_wrapper_tmp
"
${
CMAKE_BINARY_DIR
}${
CMAKE_FILES_DIRECTORY
}
/xcodebuild_wrapper"
)
if
(
NOT DEFINED CMAKE_MAKE_PROGRAM
)
# empty since CMake 3.10
find_program
(
XCODEBUILD_PATH
"xcodebuild"
)
...
...
@@ -122,7 +131,9 @@ if(NOT __IN_TRY_COMPILE)
configure_file
(
"
${
CMAKE_CURRENT_LIST_DIR
}
/xcodebuild_wrapper.in"
"
${
_xcodebuild_wrapper_tmp
}
"
@ONLY
)
file
(
COPY
"
${
_xcodebuild_wrapper_tmp
}
"
DESTINATION
${
CMAKE_BINARY_DIR
}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
endif
()
set
(
CMAKE_MAKE_PROGRAM
"
${
_xcodebuild_wrapper
}
"
CACHE INTERNAL
""
FORCE
)
if
(
_xcodebuild_wrapper
)
set
(
CMAKE_MAKE_PROGRAM
"
${
_xcodebuild_wrapper
}
"
CACHE INTERNAL
""
FORCE
)
endif
()
endif
()
# Standard settings
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录