Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
e5841d31
O
Opencv
项目概览
Greenplum
/
Opencv
9 个月 前同步成功
通知
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 搜索 >>
提交
e5841d31
编写于
7月 02, 2021
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
java: force using of 'Ptr<>' for OpenCV classes
上级
8fad85ed
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
27 addition
and
16 deletion
+27
-16
modules/dnn/misc/java/gen_dict.json
modules/dnn/misc/java/gen_dict.json
+1
-1
modules/java/generator/gen_java.py
modules/java/generator/gen_java.py
+19
-15
modules/video/misc/java/test/TrackerCreateTest.java
modules/video/misc/java/test/TrackerCreateTest.java
+7
-0
未找到文件。
modules/dnn/misc/java/gen_dict.json
浏览文件 @
e5841d31
...
...
@@ -54,7 +54,7 @@
]
],
"jni_name"
:
"(*(
cv::dnn::DictValue*)%(n)s_nativeObj
)"
,
"jni_name"
:
"(*(
*(Ptr<cv::dnn::DictValue>*)%(n)s_nativeObj)
)"
,
"jni_type"
:
"jlong"
,
"suffix"
:
"J"
,
"j_import"
:
"org.opencv.dnn.DictValue"
...
...
modules/java/generator/gen_java.py
浏览文件 @
e5841d31
...
...
@@ -258,6 +258,8 @@ class ClassInfo(GeneralInfo):
for
m
in
decl
[
2
]:
if
m
.
startswith
(
"="
):
self
.
jname
=
m
[
1
:]
if
m
==
'/Simple'
:
self
.
smart
=
False
if
self
.
classpath
:
prefix
=
self
.
classpath
.
replace
(
'.'
,
'_'
)
...
...
@@ -445,7 +447,7 @@ class JavaWrapperGenerator(object):
def
clear
(
self
):
self
.
namespaces
=
[
"cv"
]
classinfo_Mat
=
ClassInfo
([
'class cv.Mat'
,
''
,
[],
[]
],
self
.
namespaces
)
classinfo_Mat
=
ClassInfo
([
'class cv.Mat'
,
''
,
[
'/Simple'
],
[]
],
self
.
namespaces
)
self
.
classes
=
{
"Mat"
:
classinfo_Mat
}
self
.
module
=
""
self
.
Module
=
""
...
...
@@ -466,10 +468,15 @@ class JavaWrapperGenerator(object):
if
name
in
type_dict
and
not
classinfo
.
base
:
logging
.
warning
(
'duplicated: %s'
,
classinfo
)
return
if
self
.
isSmartClass
(
classinfo
):
jni_name
=
"*((*(Ptr<"
+
classinfo
.
fullNameCPP
()
+
">*)%(n)s_nativeObj).get())"
else
:
jni_name
=
"(*("
+
classinfo
.
fullNameCPP
()
+
"*)%(n)s_nativeObj)"
type_dict
.
setdefault
(
name
,
{}).
update
(
{
"j_type"
:
classinfo
.
jname
,
"jn_type"
:
"long"
,
"jn_args"
:
((
"__int64"
,
".nativeObj"
),),
"jni_name"
:
"(*("
+
classinfo
.
fullNameCPP
()
+
"*)%(n)s_nativeObj)"
,
"jni_type"
:
"jlong"
,
"jni_name"
:
jni_name
,
"jni_type"
:
"jlong"
,
"suffix"
:
"J"
,
"j_import"
:
"org.opencv.%s.%s"
%
(
self
.
module
,
classinfo
.
jname
)
}
...
...
@@ -477,7 +484,8 @@ class JavaWrapperGenerator(object):
type_dict
.
setdefault
(
name
+
'*'
,
{}).
update
(
{
"j_type"
:
classinfo
.
jname
,
"jn_type"
:
"long"
,
"jn_args"
:
((
"__int64"
,
".nativeObj"
),),
"jni_name"
:
"("
+
classinfo
.
fullNameCPP
()
+
"*)%(n)s_nativeObj"
,
"jni_type"
:
"jlong"
,
"jni_name"
:
"&("
+
jni_name
+
")"
,
"jni_type"
:
"jlong"
,
"suffix"
:
"J"
,
"j_import"
:
"org.opencv.%s.%s"
%
(
self
.
module
,
classinfo
.
jname
)
}
...
...
@@ -966,7 +974,13 @@ class JavaWrapperGenerator(object):
ret
=
"return env->NewStringUTF(_retval_.c_str());"
default
=
'return env->NewStringUTF("");'
elif
self
.
isWrapped
(
fi
.
ctype
):
# wrapped class:
ret
=
"return (jlong) new %s(_retval_);"
%
self
.
fullTypeNameCPP
(
fi
.
ctype
)
ret
=
None
if
fi
.
ctype
in
self
.
classes
:
ret_ci
=
self
.
classes
[
fi
.
ctype
]
if
self
.
isSmartClass
(
ret_ci
):
ret
=
"return (jlong)(new Ptr<%(ctype)s>(new %(ctype)s(_retval_)));"
%
{
'ctype'
:
ret_ci
.
fullNameCPP
()
}
if
ret
is
None
:
ret
=
"return (jlong) new %s(_retval_);"
%
self
.
fullTypeNameCPP
(
fi
.
ctype
)
elif
fi
.
ctype
.
startswith
(
'Ptr_'
):
c_prologue
.
append
(
"typedef Ptr<%s> %s;"
%
(
self
.
fullTypeNameCPP
(
fi
.
ctype
[
4
:]),
fi
.
ctype
))
ret
=
"return (jlong)(new %(ctype)s(_retval_));"
%
{
'ctype'
:
fi
.
ctype
}
...
...
@@ -1207,17 +1221,7 @@ JNIEXPORT void JNICALL Java_org_opencv_%(module)s_%(j_cls)s_delete
if
ci
.
smart
!=
None
:
return
ci
.
smart
# if parents are smart (we hope) then children are!
# if not we believe the class is smart if it has "create" method
ci
.
smart
=
False
if
ci
.
base
or
ci
.
name
==
'Algorithm'
:
ci
.
smart
=
True
else
:
for
fi
in
ci
.
methods
:
if
fi
.
name
==
"create"
:
ci
.
smart
=
True
break
ci
.
smart
=
True
# smart class is not properly handled in case of base/derived classes
return
ci
.
smart
def
smartWrap
(
self
,
ci
,
fullname
):
...
...
modules/video/misc/java/test/TrackerCreateTest.java
浏览文件 @
e5841d31
package
org.opencv.test.video
;
import
org.opencv.core.Core
;
import
org.opencv.core.CvType
;
import
org.opencv.core.CvException
;
import
org.opencv.core.Mat
;
import
org.opencv.core.Rect
;
import
org.opencv.test.OpenCVTestCase
;
import
org.opencv.video.Tracker
;
...
...
@@ -27,6 +30,10 @@ public class TrackerCreateTest extends OpenCVTestCase {
public
void
testCreateTrackerMIL
()
{
Tracker
tracker
=
TrackerMIL
.
create
();
assert
(
tracker
!=
null
);
Mat
mat
=
new
Mat
(
100
,
100
,
CvType
.
CV_8UC1
);
Rect
rect
=
new
Rect
(
10
,
10
,
30
,
30
);
tracker
.
init
(
mat
,
rect
);
// should not crash (https://github.com/opencv/opencv/issues/19915)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录