Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
6a395d88
O
opencv
项目概览
OpenCV
/
opencv
上一次同步 9 个月
通知
992
Star
71100
Fork
55581
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6a395d88
编写于
1月 13, 2018
作者:
D
Dmitry Kurtaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dnn::blobFromImage with OutputArray
上级
0c00652f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
63 addition
and
21 deletion
+63
-21
modules/dnn/include/opencv2/dnn/dnn.hpp
modules/dnn/include/opencv2/dnn/dnn.hpp
+20
-1
modules/dnn/src/dnn.cpp
modules/dnn/src/dnn.cpp
+33
-20
modules/dnn/test/test_misc.cpp
modules/dnn/test/test_misc.cpp
+10
-0
未找到文件。
modules/dnn/include/opencv2/dnn/dnn.hpp
浏览文件 @
6a395d88
...
...
@@ -695,6 +695,16 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
*/
CV_EXPORTS_W
Mat
blobFromImage
(
InputArray
image
,
double
scalefactor
=
1.0
,
const
Size
&
size
=
Size
(),
const
Scalar
&
mean
=
Scalar
(),
bool
swapRB
=
true
,
bool
crop
=
true
);
/** @brief Creates 4-dimensional blob from image.
* @details This is an overloaded member function, provided for convenience.
* It differs from the above function only in what argument(s) it accepts.
*/
CV_EXPORTS
void
blobFromImage
(
InputArray
image
,
OutputArray
blob
,
double
scalefactor
=
1.0
,
const
Size
&
size
=
Size
(),
const
Scalar
&
mean
=
Scalar
(),
bool
swapRB
=
true
,
bool
crop
=
true
);
/** @brief Creates 4-dimensional blob from series of images. Optionally resizes and
* crops @p images from center, subtract @p mean values, scales values by @p scalefactor,
* swap Blue and Red channels.
...
...
@@ -711,9 +721,18 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* If @p crop is false, direct resize without cropping and preserving aspect ratio is performed.
* @returns 4-dimansional Mat with NCHW dimensions order.
*/
CV_EXPORTS_W
Mat
blobFromImages
(
const
std
::
vector
<
Mat
>&
images
,
double
scalefactor
=
1.0
,
CV_EXPORTS_W
Mat
blobFromImages
(
InputArrayOfArrays
images
,
double
scalefactor
=
1.0
,
Size
size
=
Size
(),
const
Scalar
&
mean
=
Scalar
(),
bool
swapRB
=
true
,
bool
crop
=
true
);
/** @brief Creates 4-dimensional blob from series of images.
* @details This is an overloaded member function, provided for convenience.
* It differs from the above function only in what argument(s) it accepts.
*/
CV_EXPORTS
void
blobFromImages
(
InputArrayOfArrays
images
,
OutputArray
blob
,
double
scalefactor
=
1.0
,
Size
size
=
Size
(),
const
Scalar
&
mean
=
Scalar
(),
bool
swapRB
=
true
,
bool
crop
=
true
);
/** @brief Convert all weights of Caffe network to half precision floating point.
* @param src Path to origin model from Caffe framework contains single
* precision floating point weights (usually has `.caffemodel` extension).
...
...
modules/dnn/src/dnn.cpp
浏览文件 @
6a395d88
...
...
@@ -81,27 +81,39 @@ namespace
};
}
template
<
typename
T
>
static
String
toString
(
const
T
&
v
)
Mat
blobFromImage
(
InputArray
image
,
double
scalefactor
,
const
Size
&
size
,
const
Scalar
&
mean
,
bool
swapRB
,
bool
crop
)
{
std
::
ostringstream
ss
;
ss
<<
v
;
return
ss
.
str
();
CV_TRACE_FUNCTION
();
Mat
blob
;
blobFromImage
(
image
,
blob
,
scalefactor
,
size
,
mean
,
swapRB
,
crop
);
return
blob
;
}
Mat
blobFromImage
(
InputArray
image
,
double
scalefactor
,
const
Size
&
size
,
const
Scalar
&
mean
,
bool
swapRB
,
bool
crop
)
void
blobFromImage
(
InputArray
image
,
OutputArray
blob
,
double
scalefactor
,
const
Size
&
size
,
const
Scalar
&
mean
,
bool
swapRB
,
bool
crop
)
{
CV_TRACE_FUNCTION
();
std
::
vector
<
Mat
>
images
(
1
,
image
.
getMat
());
return
blobFromImages
(
images
,
scalefactor
,
size
,
mean
,
swapRB
,
crop
);
blobFromImages
(
images
,
blob
,
scalefactor
,
size
,
mean
,
swapRB
,
crop
);
}
Mat
blobFromImages
(
const
std
::
vector
<
Mat
>&
images_
,
double
scalefactor
,
Size
size
,
const
Scalar
&
mean
_
,
bool
swapRB
,
bool
crop
)
Mat
blobFromImages
(
InputArrayOfArrays
images
,
double
scalefactor
,
Size
size
,
const
Scalar
&
mean
,
bool
swapRB
,
bool
crop
)
{
CV_TRACE_FUNCTION
();
std
::
vector
<
Mat
>
images
=
images_
;
Mat
blob
;
blobFromImages
(
images
,
blob
,
scalefactor
,
size
,
mean
,
swapRB
,
crop
);
return
blob
;
}
void
blobFromImages
(
InputArrayOfArrays
images_
,
OutputArray
blob_
,
double
scalefactor
,
Size
size
,
const
Scalar
&
mean_
,
bool
swapRB
,
bool
crop
)
{
CV_TRACE_FUNCTION
();
std
::
vector
<
Mat
>
images
;
images_
.
getMatVector
(
images
);
CV_Assert
(
!
images
.
empty
());
for
(
int
i
=
0
;
i
<
images
.
size
();
i
++
)
{
Size
imgSize
=
images
[
i
].
size
();
...
...
@@ -133,16 +145,15 @@ Mat blobFromImages(const std::vector<Mat>& images_, double scalefactor, Size siz
}
size_t
i
,
nimages
=
images
.
size
();
if
(
nimages
==
0
)
return
Mat
();
Mat
image0
=
images
[
0
];
int
nch
=
image0
.
channels
();
CV_Assert
(
image0
.
dims
==
2
);
Mat
blob
,
image
;
Mat
image
;
if
(
nch
==
3
||
nch
==
4
)
{
int
sz
[]
=
{
(
int
)
nimages
,
nch
,
image0
.
rows
,
image0
.
cols
};
blob
=
Mat
(
4
,
sz
,
CV_32F
);
blob_
.
create
(
4
,
sz
,
CV_32F
);
Mat
blob
=
blob_
.
getMat
();
Mat
ch
[
4
];
for
(
i
=
0
;
i
<
nimages
;
i
++
)
...
...
@@ -164,7 +175,8 @@ Mat blobFromImages(const std::vector<Mat>& images_, double scalefactor, Size siz
{
CV_Assert
(
nch
==
1
);
int
sz
[]
=
{
(
int
)
nimages
,
1
,
image0
.
rows
,
image0
.
cols
};
blob
=
Mat
(
4
,
sz
,
CV_32F
);
blob_
.
create
(
4
,
sz
,
CV_32F
);
Mat
blob
=
blob_
.
getMat
();
for
(
i
=
0
;
i
<
nimages
;
i
++
)
{
...
...
@@ -177,7 +189,6 @@ Mat blobFromImages(const std::vector<Mat>& images_, double scalefactor, Size siz
image
.
copyTo
(
Mat
(
image
.
rows
,
image
.
cols
,
CV_32F
,
blob
.
ptr
((
int
)
i
,
0
)));
}
}
return
blob
;
}
class
OpenCLBackendWrapper
:
public
BackendWrapper
...
...
@@ -886,7 +897,8 @@ struct Net::Impl
{
LayerPin
storedFrom
=
ld
.
inputBlobsId
[
inNum
];
if
(
storedFrom
.
valid
()
&&
!
storedFrom
.
equal
(
from
))
CV_Error
(
Error
::
StsError
,
"Input #"
+
toString
(
inNum
)
+
"of layer
\"
"
+
ld
.
name
+
"
\"
already was connected"
);
CV_Error
(
Error
::
StsError
,
format
(
"Input #%d of layer
\"
%s
\"
already was connected"
,
inNum
,
ld
.
name
.
c_str
()));
}
ld
.
inputBlobsId
[
inNum
]
=
from
;
...
...
@@ -1665,8 +1677,9 @@ struct Net::Impl
LayerData
&
ld
=
layers
[
pin
.
lid
];
if
((
size_t
)
pin
.
oid
>=
ld
.
outputBlobs
.
size
())
{
CV_Error
(
Error
::
StsOutOfRange
,
"Layer
\"
"
+
ld
.
name
+
"
\"
produce only "
+
toString
(
ld
.
outputBlobs
.
size
())
+
" outputs, the #"
+
toString
(
pin
.
oid
)
+
" was requsted"
);
CV_Error
(
Error
::
StsOutOfRange
,
format
(
"Layer
\"
%s
\"
produce only %d outputs, "
"the #%d was requsted"
,
ld
.
name
.
c_str
(),
ld
.
outputBlobs
.
size
(),
pin
.
oid
));
}
if
(
preferableTarget
!=
DNN_TARGET_CPU
)
{
...
...
modules/dnn/test/test_misc.cpp
浏览文件 @
6a395d88
...
...
@@ -27,4 +27,14 @@ TEST(blobFromImage_4ch, Regression)
}
}
TEST
(
blobFromImage
,
allocated
)
{
int
size
[]
=
{
1
,
3
,
4
,
5
};
Mat
img
(
size
[
2
],
size
[
3
],
CV_32FC
(
size
[
1
]));
Mat
blob
(
4
,
size
,
CV_32F
);
void
*
blobData
=
blob
.
data
;
dnn
::
blobFromImage
(
img
,
blob
,
1.0
/
255
,
Size
(),
Scalar
(),
false
,
false
);
ASSERT_EQ
(
blobData
,
blob
.
data
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录