图像处理之图像匹配

该说图像匹配了,图像匹配在图片处理中的作用举重若轻,今天就带大家入门图像匹配,简单介绍一下基础的图像匹配吧。

何为图像匹配呢?在原图片中扣出一块区域,然后通过这块区域的像素找到它在原始图片的位置,在今天所讲的是如此。

来看看百度百科给下的定义吧: 通过对影像内容、特征、结构、关系、纹理及灰度等的对应关系,相似性和一致性的分析,寻求相似影像目标的方法。

**1.**通过欧式距离来匹配图像。

将所有像素值看成一个坐标(不用管它是多少维的),通过最小化这两个坐标的欧式距离来确定最终在原始图像上匹配的位置。
欧式距离公式为:
在这里插入图片描述
下面通过代码来演示如何实现

import cv2 
import numpy as np

def Distance(x,y):   #计算欧式距离
	x = np.array(x)
	y = np.array(y)
	return np.sqrt(np.sum((x-y)*(x-y)))
img1 = cv2.imread('1.jpg')  #原始图片
img2 = img1[300:400,300:400]  #要匹配的区域

h = img2.shape[0]
w = img2.shape[1]
mins = le5   距离的最小值
for i in range(0,img1.shape[0]-h):  #遍历图片
	for j in range(0,img1.shape[1]-w):
			dist = img1[i:i+h,j:j+w]
			loss = Distance(dist,img2)
			if loss < mins:
				now_h = i
				now_w = j     #记住当前目标区域左上角的位置
				mins = loss   #更新最小值

cv2.rectangle(img1,(now_w,now_h),(now_w+w,now_h+h),(255,0,0))
cv2,imshow('dist',img1)
cv2,waitKey(0)


2.通过差分矩阵求和 均值来匹配

原理: 目标区域的像素值 - 模板区域的像素值,然后根据其和的大小 或者 其均值的大小来确定目标区域。

下面直接通过代码来演示

import cv2
import numpy as np
img1 = cv2.imread("1.jpg")
img2 = img1[100:250,200:350]
h , w = img2.shape[:2]
findpt = []
for i in range(0,img1.shape[0]-h):
    for j in range(0,img1.shape[1]-h):
    	com = img1[i:i+h,j:j+w] - img2
    	if np.mean(com)<20:    #np.sum(com) <1
    	findpt.append(i)
    	findpt.append(j)
    	break
 if len(findpt)>0:
    cv.rectangle(img1,(findpt[1],findpt[0]),(findpt[1]+w,findpt[0]+h),(255,0,0))

cv.imshow('dsts',img1)
cv.waitKey(0) 

今天的图像匹配的入门基础讲解就说到这里了,下次再见。

Thank for your reading !!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值