图像查找

简介: 图像查找
import cv2
import numpy as np

# 打开图片
img1 = cv2.imread('./image/min_cat.png')
img2 = cv2.imread('./image/cat.png')

# 灰度化
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# 创建特征检测器
sift = cv2.xfeatures2d.SIFT_create()

# 把关键点(特征点)和描述子一起检测出来.
kp1, des1 = sift.detectAndCompute(gray1,None)
kp2, des2 = sift.detectAndCompute(gray2,None)

# 创建特征匹配器
index_params = dict(algorithm = 1, trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params,search_params)

# 对描述子进行特征匹配
matches = flann.knnMatch(des1,des2,k=2)
# print(matches)

goods = []
for (m,n) in matches:
    # 阈值一般设0.7-0.8之间
    if m.distance < 0.75*n.distance:
        goods.append(m)

# print(goods)
# 通过goods把特征点找到
# 因为计算单应性矩阵要求最少4个点
if len(goods) >=4:
    src_points = np.float32([kp1[m.queryIdx].pt for m in goods]).reshape(-1,1,2)
    dst_points = np.float32([kp2[m.trainIdx].pt for m in goods]).reshape(-1,1,2)

    # 根据匹配上的关键点去计算单应性矩阵
    H , _ = cv2.findHomography(src_points,dst_points,cv2.RANSAC,5)
    # 通过单应性矩阵,计算小图在大图中的对应位置
    h,w = img1.shape[:2]
    pts = np.float32([[0,0],[0,h-1],[w-1,h-1],[w-1,0]]).reshape(-1,1,2)
    # warpPerspective 是对图片进行透视变换的
    # cv2.warpPerspective()
    dst = cv2.perspectiveTransform(pts,H)
    # 在大图中,把dst画出来
    cv2.polylines(img2,[np.int32(dst)],True,(0,0,255),2)

else:
    print('not enough point number to compute homography matrix')
    exit()

# 画出匹配的特征点
ret = cv2.drawMatchesKnn(img1,kp1,img2,kp2,[goods],None)

cv2.imshow('ret',ret)
cv2.imshow('img2',img2)

cv2.waitKey(0)
cv2.destroyAllWindows()
目录
相关文章
|
7月前
|
存储 自然语言处理 算法
高维向量压缩方法IVFPQ :通过创建索引加速矢量搜索
向量相似性搜索是从特定嵌入空间中的给定向量列表中找到相似的向量。它能有效地从大型数据集中检索相关信息,在各个领域和应用中发挥着至关重要的作用。
367 0
|
7月前
|
编解码 计算机视觉 索引
OpenCV使用单目标匹配从图像中选择最佳的匹配结果及查找重复图像实战(附Python源码)
OpenCV使用单目标匹配从图像中选择最佳的匹配结果及查找重复图像实战(附Python源码)
281 0
|
4月前
|
数据采集 机器学习/深度学习 算法
5.2.3 检测头设计(计算预测框位置和类别)
这篇文章详细介绍了YOLOv3目标检测模型中的检测头设计,包括预测框是否包含物体的概率计算、预测物体的位置和形状、预测物体类别的概率,并展示了如何通过网络输出得到预测值,以及如何建立损失函数来训练模型。
|
5月前
|
文字识别
文本,文字识别,PaddleOCR,如何删除,PaddleOCR详解,检测,方向分类器,识别,检测的意思是检查字符的位置,查像素坐标,方向分类器,能够实现180度的图像,字符识别是把识别字符
文本,文字识别,PaddleOCR,如何删除,PaddleOCR详解,检测,方向分类器,识别,检测的意思是检查字符的位置,查像素坐标,方向分类器,能够实现180度的图像,字符识别是把识别字符
|
6月前
|
Python
查找轮廓
【6月更文挑战第25天】查找轮廓。
35 1
|
6月前
|
存储 算法 Python
查找图像轮廓
【6月更文挑战第11天】查找图像轮廓。
60 3
|
6月前
|
算法 计算机视觉 Python
第6章 图像检索以及基于图像描述符的搜索
第6章 图像检索以及基于图像描述符的搜索
|
存储 编解码 对象存储
将图像标记器多边形转换为标记的块图像以进行语义分割
将存储在对象中的多边形标签转换为适用于语义分割工作流的标记阻止图像。 可以使用计算机视觉工具箱中的图像标记器应用来标记太大而无法放入内存和多分辨率图像的图像。有关详细信息,请参阅在图像标记器(计算机视觉工具箱)中标记大图像。图像标记器应用不支持对被阻止的图像进行像素标记。您只能使用 ROI 形状(如多边形、矩形和线条)创建标签。此示例演示如何使用函数将多边形 ROI 转换为像素标记的块图像,以进行语义分割工作流。
75 0
将图像标记器多边形转换为标记的块图像以进行语义分割
|
算法 固态存储
分别使用SAD匹配,NCC匹配,SSD匹配三种算法提取双目图像的深度信息
分别使用SAD匹配,NCC匹配,SSD匹配三种算法提取双目图像的深度信息
180 0
分别使用SAD匹配,NCC匹配,SSD匹配三种算法提取双目图像的深度信息
|
计算机视觉
人脸比对实现判断并查找面部特征
compare_faces( ) compare_faces( known_face_encodings, face_encoding_to_check, tolerance=0.6 ) 比较脸部编码列表和候选编码,看看它们是否匹配。 参数: known_face_encodings:已知的人脸编码列表 face_encoding_to_check:待进行对比的单张人脸编码数据 tolerance:两张脸之间有多少距离才算匹配。该值越小对比越严格,0.6是典型的最佳值。 返回值: 一个 True或者False值的列表,该表指示了known_face_encodings列表的每个成员的匹
377 1