Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
3e9e2f09
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
3e9e2f09
编写于
10月 12, 2010
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
united cv::Mat and cv::MatND
上级
541441e8
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
57 addition
and
52 deletion
+57
-52
modules/imgproc/src/histogram.cpp
modules/imgproc/src/histogram.cpp
+57
-52
未找到文件。
modules/imgproc/src/histogram.cpp
浏览文件 @
3e9e2f09
...
...
@@ -48,13 +48,12 @@ namespace cv
static
const
size_t
OUT_OF_RANGE
=
(
size_t
)
1
<<
(
sizeof
(
size_t
)
*
8
-
2
);
static
void
calcHistLookupTables_8u
(
const
MatND
&
hist
,
const
SparseMat
&
shist
,
const
float
**
ranges
,
const
double
*
uniranges
,
calcHistLookupTables_8u
(
const
Mat
&
hist
,
const
SparseMat
&
shist
,
int
dims
,
const
float
**
ranges
,
const
double
*
uniranges
,
bool
uniform
,
bool
issparse
,
vector
<
size_t
>&
_tab
)
{
const
int
low
=
0
,
high
=
256
;
int
i
,
j
,
dims
=
!
issparse
?
hist
.
dims
:
shist
.
dims
()
;
int
i
,
j
;
_tab
.
resize
((
high
-
low
)
*
dims
);
size_t
*
tab
=
&
_tab
[
0
];
...
...
@@ -208,13 +207,13 @@ static void histPrepareImages( const Mat* images, int nimages, const int* channe
template
<
typename
T
>
static
void
calcHist_
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
Mat
ND
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
Mat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
bool
uniform
)
{
T
**
ptrs
=
(
T
**
)
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
uchar
*
H
=
hist
.
data
;
int
i
,
x
,
dims
=
hist
.
dims
;
int
i
,
x
;
const
uchar
*
mask
=
_ptrs
[
dims
];
int
mstep
=
_deltas
[
dims
*
2
+
1
];
int
size
[
CV_MAX_DIM
];
...
...
@@ -423,18 +422,18 @@ calcHist_( vector<uchar*>& _ptrs, const vector<int>& _deltas,
static
void
calcHist_8u
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
Mat
ND
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
Mat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
bool
uniform
)
{
uchar
**
ptrs
=
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
uchar
*
H
=
hist
.
data
;
int
i
,
x
,
dims
=
hist
.
dims
;
int
i
,
x
;
const
uchar
*
mask
=
_ptrs
[
dims
];
int
mstep
=
_deltas
[
dims
*
2
+
1
];
vector
<
size_t
>
_tab
;
calcHistLookupTables_8u
(
hist
,
SparseMat
(),
_ranges
,
_uniranges
,
uniform
,
false
,
_tab
);
calcHistLookupTables_8u
(
hist
,
SparseMat
(),
dims
,
_ranges
,
_uniranges
,
uniform
,
false
,
_tab
);
const
size_t
*
tab
=
&
_tab
[
0
];
if
(
dims
==
1
)
...
...
@@ -590,13 +589,13 @@ calcHist_8u( vector<uchar*>& _ptrs, const vector<int>& _deltas,
void
calcHist
(
const
Mat
*
images
,
int
nimages
,
const
int
*
channels
,
const
Mat
&
mask
,
Mat
ND
&
hist
,
int
dims
,
const
int
*
histSize
,
const
Mat
&
mask
,
Mat
&
hist
,
int
dims
,
const
int
*
histSize
,
const
float
**
ranges
,
bool
uniform
,
bool
accumulate
)
{
CV_Assert
(
dims
>
0
&&
histSize
);
hist
.
create
(
dims
,
histSize
,
CV_32F
);
Mat
ND
ihist
=
hist
;
Mat
ihist
=
hist
;
ihist
.
flags
=
(
ihist
.
flags
&
~
CV_MAT_TYPE_MASK
)
|
CV_32S
;
if
(
!
accumulate
)
...
...
@@ -610,15 +609,15 @@ void calcHist( const Mat* images, int nimages, const int* channels,
Size
imsize
;
CV_Assert
(
!
mask
.
data
||
mask
.
type
()
==
CV_8UC1
);
histPrepareImages
(
images
,
nimages
,
channels
,
mask
,
hist
.
dims
,
hist
.
size
,
ranges
,
histPrepareImages
(
images
,
nimages
,
channels
,
mask
,
dims
,
hist
.
size
,
ranges
,
uniform
,
ptrs
,
deltas
,
imsize
,
uniranges
);
const
double
*
_uniranges
=
uniform
?
&
uniranges
[
0
]
:
0
;
int
depth
=
images
[
0
].
depth
();
if
(
depth
==
CV_8U
)
calcHist_8u
(
ptrs
,
deltas
,
imsize
,
ihist
,
ranges
,
_uniranges
,
uniform
);
calcHist_8u
(
ptrs
,
deltas
,
imsize
,
ihist
,
dims
,
ranges
,
_uniranges
,
uniform
);
else
if
(
depth
==
CV_32F
)
calcHist_
<
float
>
(
ptrs
,
deltas
,
imsize
,
ihist
,
ranges
,
_uniranges
,
uniform
);
calcHist_
<
float
>
(
ptrs
,
deltas
,
imsize
,
ihist
,
dims
,
ranges
,
_uniranges
,
uniform
);
ihist
.
convertTo
(
hist
,
CV_32F
);
}
...
...
@@ -626,12 +625,12 @@ void calcHist( const Mat* images, int nimages, const int* channels,
template
<
typename
T
>
static
void
calcSparseHist_
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
SparseMat
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
SparseMat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
bool
uniform
)
{
T
**
ptrs
=
(
T
**
)
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
int
i
,
x
,
dims
=
hist
.
dims
()
;
int
i
,
x
;
const
uchar
*
mask
=
_ptrs
[
dims
];
int
mstep
=
_deltas
[
dims
*
2
+
1
];
const
int
*
size
=
hist
.
hdr
->
size
;
...
...
@@ -710,18 +709,18 @@ calcSparseHist_( vector<uchar*>& _ptrs, const vector<int>& _deltas,
static
void
calcSparseHist_8u
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
SparseMat
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
SparseMat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
bool
uniform
)
{
uchar
**
ptrs
=
(
uchar
**
)
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
int
i
,
x
,
dims
=
hist
.
dims
()
;
int
i
,
x
;
const
uchar
*
mask
=
_ptrs
[
dims
];
int
mstep
=
_deltas
[
dims
*
2
+
1
];
int
idx
[
CV_MAX_DIM
];
vector
<
size_t
>
_tab
;
calcHistLookupTables_8u
(
Mat
ND
(),
hist
,
_ranges
,
_uniranges
,
uniform
,
true
,
_tab
);
calcHistLookupTables_8u
(
Mat
(),
hist
,
dims
,
_ranges
,
_uniranges
,
uniform
,
true
,
_tab
);
const
size_t
*
tab
=
&
_tab
[
0
];
for
(
;
imsize
.
height
--
;
mask
+=
mstep
)
...
...
@@ -773,15 +772,15 @@ static void calcHist( const Mat* images, int nimages, const int* channels,
Size
imsize
;
CV_Assert
(
!
mask
.
data
||
mask
.
type
()
==
CV_8UC1
);
histPrepareImages
(
images
,
nimages
,
channels
,
mask
,
hist
.
dims
()
,
hist
.
hdr
->
size
,
ranges
,
histPrepareImages
(
images
,
nimages
,
channels
,
mask
,
dims
,
hist
.
hdr
->
size
,
ranges
,
uniform
,
ptrs
,
deltas
,
imsize
,
uniranges
);
const
double
*
_uniranges
=
uniform
?
&
uniranges
[
0
]
:
0
;
int
depth
=
images
[
0
].
depth
();
if
(
depth
==
CV_8U
)
calcSparseHist_8u
(
ptrs
,
deltas
,
imsize
,
hist
,
ranges
,
_uniranges
,
uniform
);
calcSparseHist_8u
(
ptrs
,
deltas
,
imsize
,
hist
,
dims
,
ranges
,
_uniranges
,
uniform
);
else
if
(
depth
==
CV_32F
)
calcSparseHist_
<
float
>
(
ptrs
,
deltas
,
imsize
,
hist
,
ranges
,
_uniranges
,
uniform
);
calcSparseHist_
<
float
>
(
ptrs
,
deltas
,
imsize
,
hist
,
dims
,
ranges
,
_uniranges
,
uniform
);
if
(
!
keepInt
)
for
(
i
=
0
,
N
=
hist
.
nzcount
();
i
<
N
;
i
++
,
++
it
)
...
...
@@ -806,13 +805,13 @@ void calcHist( const Mat* images, int nimages, const int* channels,
template
<
typename
T
,
typename
BT
>
static
void
calcBackProj_
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
const
Mat
ND
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
const
Mat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
float
scale
,
bool
uniform
)
{
T
**
ptrs
=
(
T
**
)
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
uchar
*
H
=
hist
.
data
;
int
i
,
x
,
dims
=
hist
.
dims
;
int
i
,
x
;
BT
*
bproj
=
(
BT
*
)
_ptrs
[
dims
];
int
bpstep
=
_deltas
[
dims
*
2
+
1
];
int
size
[
CV_MAX_DIM
];
...
...
@@ -971,18 +970,18 @@ calcBackProj_( vector<uchar*>& _ptrs, const vector<int>& _deltas,
static
void
calcBackProj_8u
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
const
Mat
ND
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
const
Mat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
float
scale
,
bool
uniform
)
{
uchar
**
ptrs
=
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
uchar
*
H
=
hist
.
data
;
int
i
,
x
,
dims
=
hist
.
dims
;
int
i
,
x
;
uchar
*
bproj
=
_ptrs
[
dims
];
int
bpstep
=
_deltas
[
dims
*
2
+
1
];
vector
<
size_t
>
_tab
;
calcHistLookupTables_8u
(
hist
,
SparseMat
(),
_ranges
,
_uniranges
,
uniform
,
false
,
_tab
);
calcHistLookupTables_8u
(
hist
,
SparseMat
(),
dims
,
_ranges
,
_uniranges
,
uniform
,
false
,
_tab
);
const
size_t
*
tab
=
&
_tab
[
0
];
if
(
dims
==
1
)
...
...
@@ -1093,36 +1092,37 @@ calcBackProj_8u( vector<uchar*>& _ptrs, const vector<int>& _deltas,
void
calcBackProject
(
const
Mat
*
images
,
int
nimages
,
const
int
*
channels
,
const
Mat
ND
&
hist
,
Mat
&
backProject
,
const
Mat
&
hist
,
Mat
&
backProject
,
const
float
**
ranges
,
double
scale
,
bool
uniform
)
{
vector
<
uchar
*>
ptrs
;
vector
<
int
>
deltas
;
vector
<
double
>
uniranges
;
Size
imsize
;
int
dims
=
hist
.
dims
==
2
&&
hist
.
size
[
1
]
==
1
?
1
:
hist
.
dims
;
CV_Assert
(
hist
.
dims
>
0
&&
hist
.
data
);
CV_Assert
(
dims
>
0
&&
hist
.
data
);
backProject
.
create
(
images
[
0
].
size
(),
images
[
0
].
depth
()
);
histPrepareImages
(
images
,
nimages
,
channels
,
backProject
,
hist
.
dims
,
hist
.
size
,
ranges
,
histPrepareImages
(
images
,
nimages
,
channels
,
backProject
,
dims
,
hist
.
size
,
ranges
,
uniform
,
ptrs
,
deltas
,
imsize
,
uniranges
);
const
double
*
_uniranges
=
uniform
?
&
uniranges
[
0
]
:
0
;
int
depth
=
images
[
0
].
depth
();
if
(
depth
==
CV_8U
)
calcBackProj_8u
(
ptrs
,
deltas
,
imsize
,
hist
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
calcBackProj_8u
(
ptrs
,
deltas
,
imsize
,
hist
,
dims
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
else
if
(
depth
==
CV_32F
)
calcBackProj_
<
float
,
float
>
(
ptrs
,
deltas
,
imsize
,
hist
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
calcBackProj_
<
float
,
float
>
(
ptrs
,
deltas
,
imsize
,
hist
,
dims
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
}
template
<
typename
T
,
typename
BT
>
static
void
calcSparseBackProj_
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
const
SparseMat
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
const
SparseMat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
float
scale
,
bool
uniform
)
{
T
**
ptrs
=
(
T
**
)
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
int
i
,
x
,
dims
=
hist
.
dims
()
;
int
i
,
x
;
BT
*
bproj
=
(
BT
*
)
_ptrs
[
dims
];
int
bpstep
=
_deltas
[
dims
*
2
+
1
];
const
int
*
size
=
hist
.
hdr
->
size
;
...
...
@@ -1202,18 +1202,18 @@ calcSparseBackProj_( vector<uchar*>& _ptrs, const vector<int>& _deltas,
static
void
calcSparseBackProj_8u
(
vector
<
uchar
*>&
_ptrs
,
const
vector
<
int
>&
_deltas
,
Size
imsize
,
const
SparseMat
&
hist
,
const
float
**
_ranges
,
Size
imsize
,
const
SparseMat
&
hist
,
int
dims
,
const
float
**
_ranges
,
const
double
*
_uniranges
,
float
scale
,
bool
uniform
)
{
uchar
**
ptrs
=
&
_ptrs
[
0
];
const
int
*
deltas
=
&
_deltas
[
0
];
int
i
,
x
,
dims
=
hist
.
dims
()
;
int
i
,
x
;
uchar
*
bproj
=
_ptrs
[
dims
];
int
bpstep
=
_deltas
[
dims
*
2
+
1
];
vector
<
size_t
>
_tab
;
int
idx
[
CV_MAX_DIM
];
calcHistLookupTables_8u
(
Mat
ND
(),
hist
,
_ranges
,
_uniranges
,
uniform
,
true
,
_tab
);
calcHistLookupTables_8u
(
Mat
(),
hist
,
dims
,
_ranges
,
_uniranges
,
uniform
,
true
,
_tab
);
const
size_t
*
tab
=
&
_tab
[
0
];
for
(
;
imsize
.
height
--
;
bproj
+=
bpstep
)
...
...
@@ -1252,27 +1252,32 @@ void calcBackProject( const Mat* images, int nimages, const int* channels,
vector
<
int
>
deltas
;
vector
<
double
>
uniranges
;
Size
imsize
;
int
dims
=
hist
.
dims
();
CV_Assert
(
hist
.
dims
()
>
0
);
CV_Assert
(
dims
>
0
);
backProject
.
create
(
images
[
0
].
size
(),
images
[
0
].
depth
()
);
histPrepareImages
(
images
,
nimages
,
channels
,
backProject
,
hist
.
dims
()
,
hist
.
hdr
->
size
,
ranges
,
dims
,
hist
.
hdr
->
size
,
ranges
,
uniform
,
ptrs
,
deltas
,
imsize
,
uniranges
);
const
double
*
_uniranges
=
uniform
?
&
uniranges
[
0
]
:
0
;
int
depth
=
images
[
0
].
depth
();
if
(
depth
==
CV_8U
)
calcSparseBackProj_8u
(
ptrs
,
deltas
,
imsize
,
hist
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
calcSparseBackProj_8u
(
ptrs
,
deltas
,
imsize
,
hist
,
dims
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
else
if
(
depth
==
CV_32F
)
calcSparseBackProj_
<
float
,
float
>
(
ptrs
,
deltas
,
imsize
,
hist
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
calcSparseBackProj_
<
float
,
float
>
(
ptrs
,
deltas
,
imsize
,
hist
,
dims
,
ranges
,
_uniranges
,
(
float
)
scale
,
uniform
);
}
////////////////// C O M P A R E H I S T O G R A M S ////////////////////////
double
compareHist
(
const
Mat
ND
&
H1
,
const
MatND
&
H2
,
int
method
)
double
compareHist
(
const
Mat
&
H1
,
const
Mat
&
H2
,
int
method
)
{
NAryMatNDIterator
it
(
H1
,
H2
);
const
Mat
*
arrays
[]
=
{
&
H1
,
&
H2
,
0
};
Mat
planes
[
2
];
NAryMatIterator
it
(
arrays
,
planes
);
double
result
=
0
;
int
i
,
len
;
...
...
@@ -1781,7 +1786,7 @@ cvCompareHist( const CvHistogram* hist1,
if
(
!
CV_IS_SPARSE_MAT
(
hist1
->
bins
)
)
{
cv
::
Mat
ND
H1
((
const
CvMatND
*
)
hist1
->
bins
),
H2
((
const
CvMatND
*
)
hist2
->
bins
);
cv
::
Mat
H1
((
const
CvMatND
*
)
hist1
->
bins
),
H2
((
const
CvMatND
*
)
hist2
->
bins
);
return
cv
::
compareHist
(
H1
,
H2
,
method
);
}
...
...
@@ -2092,9 +2097,9 @@ cvCalcArrHist( CvArr** img, CvHistogram* hist, int accumulate, const CvArr* mask
if
(
!
CV_IS_SPARSE_HIST
(
hist
)
)
{
cv
::
Mat
ND
H
((
const
CvMatND
*
)
hist
->
bins
);
cv
::
Mat
H
((
const
CvMatND
*
)
hist
->
bins
);
cv
::
calcHist
(
&
images
[
0
],
(
int
)
images
.
size
(),
0
,
_mask
,
H
,
H
.
dims
,
H
.
size
,
ranges
,
uniform
,
accumulate
!=
0
);
H
,
cvGetDims
(
hist
->
bins
)
,
H
.
size
,
ranges
,
uniform
,
accumulate
!=
0
);
}
else
{
...
...
@@ -2154,7 +2159,7 @@ cvCalcArrBackProject( CvArr** img, CvArr* dst, const CvHistogram* hist )
if
(
!
CV_IS_SPARSE_HIST
(
hist
)
)
{
cv
::
Mat
ND
H
((
const
CvMatND
*
)
hist
->
bins
);
cv
::
Mat
H
((
const
CvMatND
*
)
hist
->
bins
);
cv
::
calcBackProject
(
&
images
[
0
],
(
int
)
images
.
size
(),
0
,
H
,
_dst
,
ranges
,
1
,
uniform
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录