Python圖像處理,cv2模塊,OpenCV實現檢索圖片 前言 開發工具 環境搭建 特徵檢測算法 圖像檢索

前言

利用Python實現OpenCV實現邊緣檢測。廢話不多說。

讓我們愉快地開始吧~

開發工具

Python版本: 3.6.4

相關模塊:

cv2模塊;

以及一些Python自帶的模塊。

環境搭建

安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。

OpenCV可以檢測圖像的主要特徵,然後提取圖像的特徵,使其成爲圖像描述符

這些圖像特徵,也就是圖像描述符,可以作爲圖像搜索的數據庫

特徵檢測算法

這裏簡單介紹一下OpenCV常用的幾種特徵檢測和提取算法。

Harris、FAST:用於檢測角點的。

SIFT、SURF、BRIEF:用於檢測斑點的。

ORBFAST算法和****BRIEF****算法的結合體。\

檢測和提取的工作做完了,就是特徵匹配。

主要是「暴力匹配法」和「FLANN匹配法」。

提了好幾次特徵了,那麼什麼是圖像的特徵呢?

圖像特徵就是指有意義的圖像區域,具有獨特性或易於識別性,比如角點、斑點以及高密度區

角點可以通過OpenCV的cornerHarris來識別。

「SIFT」則是一種與圖像比例無關的角點檢測方法,尺度不變特徵變換。

採用DoG和SIFT來檢測關鍵點並提取關鍵點周圍的特徵。

「SURF」特徵檢測算法,則是採用Hessian算法檢測關鍵點,使用SURF提取特徵。

圖像檢索

採用FLANN匹配,近似最近鄰的快速庫

原始圖片如下,爲微博的Logo

目標圖片如下,包含新浪微博的名稱

具體代碼如下

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匹配上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章