import cv2
import numpy as np
# 读取两张照片
image1 = cv2.imread('im1.jpg', 0) # 灰度图像
image2 = cv2.imread('im2.jpg', 0)
# 使用ORB特征检测器和描述符来找到关键点和描述符
orb = cv2.ORB_create()
keypoints1, descriptors1 = orb.detectAndCompute(image1, None)
keypoints2, descriptors2 = orb.detectAndCompute(image2, None)
# 使用暴力匹配器进行特征匹配
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(descriptors1, descriptors2)
# 根据匹配结果计算出两张图像之间的平移矩阵
if len(matches) > 4: # 至少需要4个匹配点
src_pts = np.float32([keypoints1[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2)
dst_pts = np.float32([keypoints2[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2)
M, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
dx = M[0, 2] # 水平方向的平移量
dy = M[1, 2] # 垂直方向的平移量
print("水平方向的平移量:", dx)
print("垂直方向的平移量:", dy)
else:
print("匹配点太少,无法计算平移量")
# 绘制匹配的关键点
matched_image = cv2.drawMatches(image1, keypoints1, image2, keypoints2, matches[:10], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
cv2.namedWindow("Matches",0);
cv2.resizeWindow("Matches", 640, 480);
cv2.imshow("Matches", matched_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
没有合适的资源?快使用搜索试试~ 我知道了~
两张图片之间存在平移量,尝试找出平移量
共3个文件
jpg:2个
py:1个
需积分: 0 0 下载量 164 浏览量
2024-05-13
09:19:25
上传
评论
收藏 244KB ZIP 举报
温馨提示
本资源主要基于python计算两张图片之间的平移量
资源推荐
资源详情
资源评论
收起资源包目录
matches.zip (3个子文件)
juzhen_in_data.py 1KB
im1.jpg 113KB
im2.jpg 132KB
共 3 条
- 1
资源评论
TOM程序员
- 粉丝: 245
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功