資源簡介
python-OpenCV實現邊緣模板匹配算法。介紹一種新的模板匹配算法,主要是基于圖像邊緣梯度,它對圖像光照與像素遷移都有很強的抗干擾能力

代碼片段和文件信息
#?-*-?coding:?utf-8?-*-
“““
OpenCV實現邊緣模板匹配算法
This?is?a?temporary?script?file.
“““
import?numpy?as?np
import?cv2
import?time
import?matplotlib.pyplot?as?plt
class?GeoMatch:
????def?__init__(self):
????????self.noOfCordinates=0???#?坐標數組中元素的個數
????????self.cordinates?=?[]???#?坐標數組存儲模型點
????????self.modelHeight=0???#?模型高
????????self.modelWidth=0???#?模型寬
????????self.edgeMagnitude?=?[]??#?梯度大小
????????self.edgeDerivativeX?=?[]??#?在X方向的梯度
????????self.edgeDerivativeY?=?[]??#?在Y方向的梯度
????????self.centerOfGravity??=?[]??#?模板重心
????????self.modelDefined=0
????def?CreateGeoMatchModel(self?templateArr?maxContrast?minContrast):
????????Ssize?=?[]
????????src?=?templateArr.copy()
????????#?設置寬和高
????????Ssize.append(src.shape[1])??#?寬
????????Ssize.append(src.shape[0])??#?高
????????self.modelHeight?=?src.shape[0]??#?存儲模板的高
????????self.modelWidth?=?src.shape[1]??#?存儲模板的寬
????????self.noOfCordinates?=?0??#?初始化
????????self.cordinates?=?[]?#self.modelWidth?*?self.modelHeight??#?為模板圖像中選定點的聯合分配內存
????????self.edgeMagnitude?=?[]??#?為選定點的邊緣幅度分配內存
????????self.edgeDerivativeX?=?[]??#?為選定點的邊緣X導數分配內存
????????self.edgeDerivativeY?=?[]??#?為選定點的邊緣Y導數分配內存
????????##?計算模板的梯度
????????gx?=?cv2.Sobel(src?cv2.CV_32F?1?0?3)
????????gy?=?cv2.Sobel(src?cv2.CV_32F?0?1?3)
????????MaxGradient?=?-99999.99
????????orients?=?[]
????????nmsEdges?=?np.zeros((Ssize[1]?Ssize[0]))
????????magMat?=?np.zeros((Ssize[1]?Ssize[0]))
????????for?i?in?range(1?Ssize[1]-1):
????????????for?j?in?range(1?Ssize[0]-1):
????????????????fdx?=?gx[i][j]??#?讀x?y的導數值
????????????????fdy?=?gy[i][j]
????????????????MagG?=?(float(fdx*fdx)?+?float(fdy?*?fdy))**(1/2.0)??#?Magnitude?=?Sqrt(gx^2?+gy^2)
????????????????direction?=?cv2.fastAtan2(float(fdy)?float(fdx))??#?Direction?=?invtan?(Gy?/?Gx)
????????????????magMat[i][j]?=?MagG
????????????????if?MagG?>?MaxGradient:
????????????????????MaxGradient?=?MagG??#?獲得最大梯度值進行歸一化。
????????????????#?從04590135得到最近的角
????????????????if?(direction?>?0?and?direction?22.5)?or?(direction?>?157.5?and?direction?202.5)?or?(direction?>?337.5?and?direction?360):
????????????????????direction?=?0
????????????????elif?(direction?>?22.5?and?direction?67.5)?or?(direction?>202.5?and?direction?<247.5):
????????????????????direction?=?45
????????????????elif?(direction?>67.5?and?direction?112.5)?or?(direction>247.5?and?direction<292.5):
????????????????????direction?=?90
????????????????elif?(direction?>112.5?and?direction?157.5)?or?(direction>292.5?and?direction<337.5):
????????????????????direction?=?135
????????????????else:
????????????????????direction?=?0
????????????????orients.append(int(direction))
????????count?=?0?#?初始化count
????????#?非最大抑制
????????for?i?in?range(1?Ssize[1]-1):
????????????for?j?in?range(1?Ssize[0]?-?1):
????????????????if?orients[count]?==?0:
????????????????????leftPixel?=?magMat[i][j-?1]
????????????????????rightPixel?=?magM
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????42793??2010-07-06?12:20??Template?Matching\Search1.jpg
?????文件??????83167??2010-07-06?12:21??Template?Matching\Search2.jpg
?????文件??????13068??2020-05-27?22:15??Template?Matching\Template?Matching.py
?????文件???????8465??2010-07-06?12:21??Template?Matching\Template.jpg
?????目錄??????????0??2020-05-27?22:24??Template?Matching
-----------?---------??----------?-----??----
???????????????147493????????????????????5
- 上一篇:預訓練數據VGG_imagenet.npy
- 下一篇:商品管理系統python
評論
共有 條評論