系列文章目录
当我们想比较两张图片相似度的时候,可以使用这一节提到的技术
关于这两种技术的原理可以参考我上面贴的链接,下面是示例的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import
cv2
.
cv
as
cv
def
drawGraph
(
ar
,
im
,
size
)
:
#Draw the histogram on the image
minV
,
maxV
,
minloc
,
maxloc
=
cv
.
MinMaxLoc
(
ar
)
#Get the min and max value
hpt
=
0.9
*
histsize
for
i
in
range
(
size
)
:
intensity
=
ar
[
i
]
*
hpt
/
maxV
#Calculate the intensity to make enter in the image
cv
.
Line
(
im
,
(
i
,
size
)
,
(
i
,
int
(
size
-
intensity
)
)
,
cv
.
Scalar
(
255
,
255
,
255
)
)
#Draw the line
i
+=
1
#---- Gray image
orig
=
cv
.
LoadImage
(
"img/lena.jpg"
,
cv
.
CV_8U
)
histsize
=
256
#Because we are working on grayscale pictures which values within 0-255
hist
=
cv
.
CreateHist
(
[
histsize
]
,
cv
.
CV_HIST_ARRAY
,
[
[
0
,
histsize
]
]
,
1
)
cv
.
CalcHist
(
[
orig
]
,
hist
)
#Calculate histogram for the given grayscale picture
histImg
=
cv
.
CreateMat
(
histsize
,
histsize
,
cv
.
CV_8U
)
#Image that will contain the graph of the repartition of values
drawGraph
(
hist
.
bins
,
histImg
,
histsize
)
cv
.
ShowImage
(
"Original Image"
,
orig
)
cv
.
ShowImage
(
"Original Histogram"
,
histImg
)
#---------------------
#---- Equalized image
imEq
=
cv
.
CloneImage
(
orig
)
cv
.
EqualizeHist
(
imEq
,
imEq
)
#Equlize the original image
histEq
=
cv
.
CreateHist
(
[
histsize
]
,
cv
.
CV_HIST_ARRAY
,
[
[
0
,
histsize
]
]
,
1
)
cv
.
CalcHist
(
[
imEq
]
,
histEq
)
#Calculate histogram for the given grayscale picture
eqImg
=
cv
.
CreateMat
(
histsize
,
histsize
,
cv
.
CV_8U
)
#Image that will contain the graph of the repartition of values
drawGraph
(
histEq
.
bins
,
eqImg
,
histsize
)
cv
.
ShowImage
(
"Image Equalized"
,
imEq
)
cv
.
ShowImage
(
"Equalized HIstogram"
,
eqImg
)
#--------------------------------
cv
.
WaitKey
(
0
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import
cv2
.
cv
as
cv
im
=
cv
.
LoadImage
(
"img/lena.jpg"
,
cv
.
CV_8U
)
cv
.
SetImageROI
(
im
,
(
1
,
1
,
30
,
30
)
)
histsize
=
256
#Because we are working on grayscale pictures
hist
=
cv
.
CreateHist
(
[
histsize
]
,
cv
.
CV_HIST_ARRAY
,
[
[
0
,
histsize
]
]
,
1
)
cv
.
CalcHist
(
[
im
]
,
hist
)
cv
.
NormalizeHist
(
hist
,
1
)
# The factor rescale values by multiplying values by the factor
_
,
max_value
,
_
,
_
=
cv
.
GetMinMaxHistValue
(
hist
)
if
max_value
==
0
:
max_value
=
1.0
cv
.
NormalizeHist
(
hist
,
256
/
max_value
)
cv
.
ResetImageROI
(
im
)
res
=
cv
.
CreateMat
(
im
.
height
,
im
.
width
,
cv
.
CV_8U
)
cv
.
CalcBackProject
(
[
im
]
,
res
,
hist
)
cv
.
Rectangle
(
im
,
(
1
,
1
)
,
(
30
,
30
)
,
(
0
,
0
,
255
)
,
2
,
cv
.
CV_FILLED
)
cv
.
ShowImage
(
"Original Image"
,
im
)
cv
.
ShowImage
(
"BackProjected"
,
res
)
cv
.
WaitKey
(
0
)
|