CV:基于计算机视觉完成两张图片的特征匹配以及用RANSAC方法寻找最佳的匹配点对和单应矩阵的代码

以下是基于OpenCV库实现的特征匹配和RANSAC算法的Python代码:

python 复制代码
import cv2
import numpy as np

# 加载图片
img1 = cv2.imread('image1.jpg', 0)
img2 = cv2.imread('image2.jpg', 0)

# 初始化SIFT检测器
sift = cv2.SIFT_create()

# 用SIFT检测图像中的关键点和特征描述符
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)

# 用FLANN算法进行特征匹配
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1, des2, k=2)

# 用RANSAC算法进行最佳匹配点对和单应矩阵的估计
good_matches = []
pts1 = []
pts2 = []
for i, (m, n) in enumerate(matches):
    if m.distance < 0.7 * n.distance:
        good_matches.append(m)
        pts2.append(kp2[m.trainIdx].pt)
        pts1.append(kp1[m.queryIdx].pt)

pts1 = np.float32(pts1)
pts2 = np.float32(pts2)
H, mask = cv2.findHomography(pts1, pts2, cv2.RANSAC)

# 绘制匹配结果
matchesMask = mask.ravel().tolist()
h, w = img1.shape
pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
dst = cv2.perspectiveTransform(pts, H)
img2 = cv2.polylines(img2, [np.int32(dst)], True, 255, 3, cv2.LINE_AA)
draw_params = dict(matchColor=(0, 255, 0), singlePointColor=None, matchesMask=matchesMask, flags=2)
result_img = cv2.drawMatches(img1, kp1, img2, kp2, good_matches, None, **draw_params)

# 显示结果
cv2.imshow('Result', result_img)
cv2.waitKey()
cv2.destroyAllWindows()

在这个代码中,我们首先加载了需要匹配的两张图片,然后用SIFT检测器提取了两张图片中的关键点和特征描述符。接下来,我们用FLANN算法进行特征匹配,并选取了距离比小于0.7的匹配点对作为好的匹配点对。然后,我们用RANSAC算法估计了最佳的单应矩阵,并用该矩阵将第一张图片的四个顶点映射到第二张图片中,从而绘制出了匹配结果。最后,我们展示了绘制好的匹配结果图像。

需要注意的是,这个代码仅仅是一个示例,实际使用时可能需要根据具体情况进行修改和优化。另外,这个代码中仅仅使用了SIFT和FLANN算法进行特征匹配,实际上还有很多其他的特征检测和匹配算法可以使用,比如ORB、FAST、BRIEF和BRISK等。

相关推荐
johnny2331 分钟前
AI工作流编排平台
人工智能
百***354842 分钟前
DeepSeek在情感分析中的细粒度识别
人工智能
Qzkj6661 小时前
从规则到智能:企业数据分类分级的先进实践与自动化转型
大数据·人工智能·自动化
weixin79893765432...1 小时前
React + Fastify + DeepSeek 实现一个简单的对话式 AI 应用
人工智能·react.js·fastify
大千AI助手2 小时前
概率单位回归(Probit Regression)详解
人工智能·机器学习·数据挖掘·回归·大千ai助手·概率单位回归·probit回归
狂炫冰美式2 小时前
3天,1人,从0到付费产品:AI时代个人开发者的生存指南
前端·人工智能·后端
LCG元3 小时前
垂直Agent才是未来:详解让大模型"专业对口"的三大核心技术
人工智能
我不是QI3 小时前
周志华《机器学习—西瓜书》二
人工智能·安全·机器学习
操练起来3 小时前
【昇腾CANN训练营·第八期】Ascend C生态兼容:基于PyTorch Adapter的自定义算子注册与自动微分实现
人工智能·pytorch·acl·昇腾·cann
KG_LLM图谱增强大模型3 小时前
[500页电子书]构建自主AI Agent系统的蓝图:谷歌重磅发布智能体设计模式指南
人工智能·大模型·知识图谱·智能体·知识图谱增强大模型·agenticai