图像匹配---(Python)
图像匹配分为以灰度为基础的匹配和以特征为基础的匹配:
1、差分矩阵求和
差分矩阵=图像A矩阵数据-图像B矩阵数据
实例代码:
#简单定位图片 import cv2 import numpy as np print 'loading ...' def showpiclocation(img,findimg): #定义定位函数 #定位图片 w=img.shape[1] #返回img的第二维度长度---宽度 h=img.shape[0] #返回img的第一维度长度---高度 fw=findimg.shape[1] fh=findimg.shape[0] findpt=None for now_h in xrange(0,h-fh): for now_w in xrange(0,w-fw): comp_tz=img[now_h:now_h+fh,now_w:now_w+fw,:]-findimg if np.sum(comp_tz)<1: findpt=now_w,now_h print ".", if findpt!=None: cv2.rectangle(img, findpt, (findpt[0]+fw,findpt[1]+fh),(0,0,255)) #opencv函数画矩形 return img fn='pictest.png' fn1='pictestt1.png' fn2='pictestt2.png' myimg=cv2.imread(fn) myimg1=cv2.imread(fn1) myimg2=cv2.imread(fn2) myimg=showpiclocation(myimg,myimg1) myimg=showpiclocation(myimg,myimg2) cv2.namedWindow('img') cv2.imshow('img', myimg) cv2.waitKey() cv2.destroyAllWindows()
2、差分矩阵均值
示例代码:
#少量噪声定位图片
import cv2
import numpy as np
print 'loading ...'
def showpiclocation(img,findimg):
#定位图片
w=img.shape[1]
h=img.shape[0]
fw=findimg.shape[1]
fh=findimg.shape[0]
findpt=None
for now_h in xrange(0,h-fh):
for now_w in xrange(0,w-fw):
comp_tz=img[now_h:now_h+fh,now_w:now_w+fw,:]-findimg
if abs(np.mean(comp_tz))<20:
findpt=now_w,now_h
print "ok"
print ".",
if findpt!=None:
cv2.rectangle(img, findpt, (findpt[0]+fw,findpt[1]+fh),(0,0,255))
return img
def addnoise(img): #为图像添加噪声
coutn=50000
for k in xrange(0,coutn):
xi = int(np.random.uniform(0,img.shape[1]))
xj = int(np.random.uniform(0,img.shape[0]))
img[xj,xi,0]= 255 *np.random.rand()
img[xj,xi,1]= 255 *np.random.rand()
img[xj,xi,2]= 255 *np.random.rand()
fn='pictest.png'
fn1='pictestt1.png'
myimg=cv2.imread(fn)
myimg1=cv2.imread(fn1)
addnoise(myimg) #添加噪声
myimg=showpiclocation(myimg,myimg1) #图像定位
cv2.namedWindow('img')
cv2.imshow('img', myimg)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果