import
cv2
good = []
# 原始图片
queryImage = cv2.imread(
'wb1.jpg'
,
0
)
# 目标图片
trainingImage = cv2.imread(
'wb2.jpg'
,
0
)
# 创建SIFT对象(特征检测器),并计算灰度图像(描述符)
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(queryImage,
None
)
kp2, des2 = sift.detectAndCompute(trainingImage,
None
)
# 设置FLANN匹配器参数
FLANN_INDEX_KDTREE =
0
indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=
5
)
searchParams = dict(checks=
50
)
# FLANN匹配器
flann = cv2.FlannBasedMatcher(indexParams, searchParams)
# K-最近邻匹配
matches = flann.knnMatch(des1, des2, k=
2
)
# 绘制一个空白图片
matchesMask = [[
0
,
0
]
for
i
in
range(len(matches))]
# 绘制图像
for
i, (m, n)
in
enumerate(matches):
if
m.distance <
0.7
*n.distance:
matchesMask[i] = [
1
,
0
]
good.append(m)
# 图像参数
drawParams = dict(matchColor=(
0
,
255
,
0
),
singlePointColor=(
255
,
0
,
0
),
matchesMask=matchesMask,
flags=
0
)
# 最终结果
resultImage = cv2.drawMatchesKnn(queryImage, kp1, trainingImage, kp2, matches,
None
, **drawParams)
# 检测是否匹配
if
len(good) >
10
:
print(
'It is a match!'
)
# 设置显示窗口
cv2.namedWindow(
'img'
,
0
)
cv2.resizeWindow(
'img'
,
840
,
480
)
cv2.imshow(
'img'
, resultImage)
while
True
:
if
cv2.waitKey(
0
) &
0xff
== ord(
'q'
):
break
cv2.destroyAllWindows()
输出下图。
可以看到原始图片上的logo和目标图片上的logo匹配上了。
也就意味着,我们能够利用原始图片(微博logo)从一个包含目标图片的图片库里检索到目标图片(包含微博logo)。
以图搜图,这还是很相似的。
当然,我并不知道以图搜图到底是通过何种办法实现的。
毕竟弱鸡~
/ 03 / 总结
最开头放的视频是今年过年时的一部电影——疯狂的外星人。
记得当时还是和一个好友一起去看的,认识十几年了,还一直保持联系。
算是为数不多我一直联系的朋友了。
正值高考来临,难免感慨一番,毕竟有些朋友真的是走着走着就散了。