图像匹配---(Python)

图像匹配---(Python)

图像匹配分为以灰度为基础的匹配和以特征为基础的匹配:

  • (1)灰度匹配是基于像素的匹配。灰度匹配通过利用某种相似性度量,如相关函数、协方差函数、差平方和、差绝对值和等测度极值,判定两幅图像中的对应关系。 
  • (2)特征匹配则是基于区域的匹配。基于特征的匹配所处理的图像一般包含的特征有颜色特征、纹理特征、形状特征、空间位置特征等

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() 

运行结果


  • 3
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
OpenCV-Python提供了一系列用于图像处理和计算机视觉任务的功能,其中包括图像匹配图像匹配是指在一幅图像中寻找与目标图像相似的区域。通过OpenCV-Python,你可以使用模板匹配技术来实现图像匹配。 模板匹配是一种基于像素值相似度的匹配方法,它通过在输入图像中滑动一个模板图像,并计算模板与滑动窗口区域的相似度来找到最佳匹配位置。在OpenCV-Python中,你可以使用cv2.matchTemplate()函数来实现模板匹配。 下面是一个简单的图像匹配的例子代码: ```python import cv2 import numpy as np # 读取输入图像和目标图像 input_img = cv2.imread('input_img.jpg') target_img = cv2.imread('target_img.jpg') # 将输入图像和目标图像转换为灰度图像 input_gray = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY) target_gray = cv2.cvtColor(target_img, cv2.COLOR_BGR2GRAY) # 执行模板匹配 result = cv2.matchTemplate(input_gray, target_gray, cv2.TM_CCOEFF_NORMED) # 获取最佳匹配位置 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) top_left = max_loc # 获取目标图像的宽度和高度 target_width, target_height = target_gray.shape[::-1] # 绘制矩形框标记目标图像 cv2.rectangle(input_img, top_left, (top_left + target_width, top_left + target_height), (0, 255, 0), 2) # 显示结果图像 cv2.imshow('Result', input_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,我们首先读取了输入图像和目标图像,并将它们转换为灰度图像。然后,我们使用cv2.matchTemplate()函数执行模板匹配,并通过获取最佳匹配位置来找到目标图像在输入图像中的位置。最后,我们使用cv2.rectangle()函数在输入图像上绘制一个矩形框来标记目标图像的位置,并显示结果图像。 请注意,这只是一个简单的图像匹配示例,你可以根据自己的需求进行更复杂的图像匹配操作,例如使用不同的匹配方法、应用阈值、使用多个目标图像等。同时,确保你已经安装了OpenCV-Python库,并准备好了输入图像和目标图像以供匹配使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值