首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在OpenCV上用drawMatches绘制虚线?

在OpenCV中使用drawMatches函数绘制虚线,可以通过以下步骤实现:

  1. 导入必要的库和模块:
代码语言:txt
复制
import cv2
import numpy as np
  1. 加载两张待匹配的图像:
代码语言:txt
复制
img1 = cv2.imread('image1.jpg', 0)
img2 = cv2.imread('image2.jpg', 0)
  1. 使用ORB或其他特征提取算法提取图像的关键点和描述符:
代码语言:txt
复制
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
  1. 使用特征匹配算法(如BFMatcher)进行特征匹配:
代码语言:txt
复制
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)
  1. 选择要绘制的匹配点数量:
代码语言:txt
复制
num_matches = 10
matches = matches[:num_matches]
  1. 创建一个空白图像,将两张待匹配图像连接在一起:
代码语言:txt
复制
result = np.empty((max(img1.shape[0], img2.shape[0]), img1.shape[1]+img2.shape[1], 3), dtype=np.uint8)
result[:img1.shape[0], :img1.shape[1]] = cv2.cvtColor(img1, cv2.COLOR_GRAY2BGR)
result[:img2.shape[0], img1.shape[1]:] = cv2.cvtColor(img2, cv2.COLOR_GRAY2BGR)
  1. 遍历匹配点,绘制虚线连接它们:
代码语言:txt
复制
for match in matches:
    img1_idx = match.queryIdx
    img2_idx = match.trainIdx
    (x1, y1) = kp1[img1_idx].pt
    (x2, y2) = kp2[img2_idx].pt
    x2 += img1.shape[1]
    cv2.line(result, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 1, cv2.LINE_AA)
  1. 显示绘制结果:
代码语言:txt
复制
cv2.imshow('Matches', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

这样就可以在OpenCV上使用drawMatches函数绘制虚线连接匹配点。请注意,以上代码仅为示例,实际应用中可能需要根据具体情况进行调整和优化。

推荐的腾讯云相关产品:腾讯云图像处理(https://cloud.tencent.com/product/tci)提供了丰富的图像处理能力,可以与OpenCV等工具结合使用,实现更多图像处理需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

浅谈LP质押模式系统开发的DAPP模式方案

流动性挖矿通常在以太坊使用ERC-20代币进行,奖励是ERC-20代币的一种形式。虽然这在未来可能会改变,但目前几乎所有的流动性挖矿交易都是在以太坊生态系统中进行的。...\build\include\opencv2在通用属性->VC++目录->库目录中添加\opencv\build\x64\vc14\lib在通用属性->链接器->输入->附加依赖项中添加opencv_world320d.libopencv_world320...startTime) / CLOCKS_PER_SEC << "s" << endl;printf("goodmatches number:%d\n", good_matches.size());//-- 第五步:绘制匹配结果.../*Mat img_match;Mat img_goodmatch;drawMatches(img_1, keyPoints_1, img_2, keyPoints_2, matches, img_match...);drawMatches(img_1, keyPoints_1, img_2, keyPoints_2, good_matches, img_goodmatch);imshow("所有匹配点对", img_match

264120

高翔Slambook第七讲代码解读(特征点提取)

作为一个视觉SLAM的入门学徒,高翔的书我看了一遍,视频也跟了一遍,代码在自己的电脑也跑过,但总觉得跟啥都没学没有太大区别。 于是乎决定开始看代码。...,对两张图的角点进行匹配 筛去匹配度较差的角点配对 绘制匹配结果 好了,在把高翔的注释抄了一遍之后,咱们来开始看代码。...#include #include #include #include...class_id:当要对图片进行分类时,我们可以class_id对每个特征点进行区分,未设定时为-1,需要靠自己设定。 octave:代表是从金字塔哪一层提取的得到的数据。 pt:关键点的坐标。...drawMatches函数 Mat img_match; drawMatches ( img_1, keypoints_1, img_2, keypoints_2, matches, img_match

1.3K53

OpenCV4.4 中SIFT特征匹配调用演示

大家好,听说OpenCV4.4 已经把SIFT跟SURF特征提取又重新get回来了,可以不需要编译OpenCV源码,直接下载官方预编译版本的就可以直接使用了。...02 特征描述子匹配 从图像到特征,是特征提取关键操作,特征描述子本质是一系列的向量数据,它可以唯一表示一张图像。对相似的特征进行区域匹配或者搜索,找到高度相似数据特征片段是特征匹配的主要工作。...+ numOfGood, matches.end()); std::cout << "good matches:" << matches.size() << std::endl; Mat dst; drawMatches...求得最终的位置信息,根据得到四个点坐标通过多边形绘制函数,完成绘制,这个其中有必要重点解释一下多边形绘制函数 void cv::polylines ( InputOutputArray...这个在ROI绘制时候有用 实现代码如下: // 绘制发现的对象 std::vector pts; for (int i = 0; i < scene_corners.size(); i+

2.8K40

OpenCV4.5.x 中SIFT特征匹配调用演示

点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 OpenCV4.4版本以后已经把SIFT跟SURF特征提取又重新get回来了,可以不需要编译OpenCV源码,直接下载官方预编译版本的就可以直接使用了...keypoints:" << keypoints_sence.size() << std::endl; 运行打印出来的关键点数目分别如下: 02 特征描述子匹配 从图像到特征,是特征提取关键操作,特征描述子本质是一系列的向量数据...+ numOfGood, matches.end()); std::cout << "good matches:" << matches.size() << std::endl; Mat dst; drawMatches...求得最终的位置信息,根据得到四个点坐标通过多边形绘制函数,完成绘制,这个其中有必要重点解释一下多边形绘制函数 void cv::polylines ( InputOutputArray...这个在ROI绘制时候有用 实现代码如下: // 绘制发现的对象 std::vector pts; for (int i = 0; i < scene_corners.size(); i+

1.3K20

C++ OpenCV4.5版本SIFT特征检测及匹配

——《微卡智享》 本文长度为2739字,预计阅读6分钟 前言 关于SIFT的特征点检测在《C++ OpenCV特征提取之SIFT特征检测》有介绍过,在OpenCV4.5版本中SIFT做是算法优化,也移到主仓库中了...所以这篇就做一下OpenCV4.5版本的SIFT特征点检测及匹配。 ? 实现效果 ? 两张原图 ? 匹配的效果 代码实现 ?...微卡智享 # 实现流程 1 定义检测的特征点个数,SIFT进行特征检测 2 对检测完的两个图做特征向量的提取 3 使用BFMatch进行匹配,筛选出好的结果 4 画出匹配的特征点 01 SIFT特征检测...筛选结果绘制图像 完整代码 #include #include #include"CvUtils.h" using namespace std...} cout << "goodMatches:" << goodMatches.size() << endl; Mat result; //匹配特征点天蓝色,单一特征点颜色随机 drawMatches

3.7K70

OpenCV SIFT特征算法详解与使用

如今SIFT算法在深度学习特征提取与分类检测网络大行其道的背景下,已经越来越有鸡肋的感觉,但是它本身的算法知识还是很值得我们学习,对我们也有很多有益的启示,本质SIFT算法是很多常见算法的组合与巧妙衔接...为了在每层图像中检测 S 个尺度的极值点,DoG 金字塔每层需 S+2 张图像,因为每组的第一张和最后一张图像不能检测极值,DoG 金字塔由高斯金字塔相邻两张相减得到,则高斯金字塔每层最少需 S+3...OpenCV中调用 OpenCV已经实现了SIFT算法,但是在OpenCV3.0之后因为专利授权问题,该算法在扩展模块xfeature2d中,需要自己编译才可以使用,OpenCV Python中从3.4.2...首先需要创建一个SIFT检测器对象,通过调用 通过detect方法提取对象关键点 drawKeypoints绘制关键点 通过compute提取描述子, 通过暴力匹配根据描述子匹配 代码演示如下 import...matches = sorted(matches, key = lambda x:x.distance) result = cv.drawMatches(box, kp1, box_in_sence,

8.4K33

opencv角点检测学习总结

erase 功能:移除参数1和参数2之间的元素,返回下一个元素 drawMatches 功能:给定两幅图像,绘制寻找到的特征关键点及其匹配 结构: void drawMatches...erase 功能:移除参数1和参数2之间的元素,返回下一个元素 drawMatches 功能:给定两幅图像,绘制寻找到的特征关键点及其匹配 结构: void drawMatches...Trajkovic算子角点提取方法存在价值是在角点提取的效果,它优于同时期的其他角点(Moravec角点,Harris角点)提取方法,同时,从算法的运行速度角度而言,它比同是期的其他角点提取方法要快很多...非极大值抑制原理是,在一个窗口内,如果有多个角点则用值最大的那个角点,其他的角点都删除,窗口大小这里我们3*3,程序中通过图像的膨胀运算来达到检测极大值的目的,因为默认参数的膨胀运算就是窗口内的最大值替代当前的灰度值...二、FAST特征点 harris特征在算法复杂性比较高,在大的复杂的目标识别或匹配应用上效率不能满足要求,OpenCV提供了一个快速检测角点的类FastFeatureDetector,而实际FAST

79120

修改一行代码,将图像匹配效果提升14%

首先,确保安装了正确的OpenCV版本是很重要的。...这个步骤被称为description,因为每个角点的局部patch中的纹理表示 为图像不同操作得到的数字的向量。...有很多的描述符可以,但如果我们想要一些精确的东西,即使在移动电话或低功耗设备也能实时运行,OpenCV有两个重要的方法: ORB(导向快速和旋转简短):一个经典的方法,有10年的历史,工作相当好。...append(matched1[i]) inliers2.append(matched2[i]) 现在我们在inliers1和inliers2变量中有了正确的匹配,我们可以使用cv.drawMatches...由于很难定性地比较这种结果,让我们绘制一些定量的评价指标。最能反映描述符可靠程度的指标是inlier的百分比: ?

50520

【图像配准】SIFT算法原理及二图配准拼接

相比于其它角点检测算法(Harris和shi-toms),SIFT算法具有角度和尺度不变性,换句话说就是不容易受到图像平移、旋转、缩放和噪声的影响。...尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜的形成过程。...一组图像的底层是由前一组图像的倒数第二层图像隔点采样生成的。...SIFT算法实践 下面进入到SIFT的编程实践,OpenCV的提供了非常方便的调用接口。 不同版本的OpenCV接口可能会略有区别,下面使用的OpenCV版本为4.5.4.60。...original_kp_set = {(int(i.pt[0]), int(i.pt[1])) for i in keypoint} # pt查看关键点坐标 print(original_kp_set) # 在图像绘制关键点的检测结果

4.1K30

Python实现图像的全景拼接

具体步骤 (1)检测左右两张图像的SIFT关键特征点,并提取局部不变特征 ; (2)使用knnMatch检测来自右图(左图)的SIFT特征,与左图(右图)进行匹配 ; (3)计算视角变换矩阵H,变换矩阵...H对右图进行扭曲变换; (4)将左图(右图)加入到变换后的图像的左侧(右侧)获得最终图像; 代码: import cv2 as cv # 导入opencv包 import numpy as...m.distance < ratio * n.distance: good.append(m) # 返回匹配的关键特征点集 return good # 计算视角变换矩阵H,H...cv.destroyAllWindows() goodMatch = get_feature_point_ensemble(features_right, features_left) # cv.drawMatches...画出匹配点对连线 # matchColor – 匹配的颜色(特征点和连线),若matchColor==Scalar::all(-1),颜色随机 all_goodmatch_image = cv.drawMatches

1.4K10

python+OpenCV 特征点检测

当然可以使用OpenCV在亚像素提高算法的精度,使用函数cv2.cornerSubPix(),不过应该使用最新版的OpenCV 我电脑是2.4.9版本,好像文档[2]中的代码没有调试通过, 下面是...由于Hessian矩阵的计算需要用到偏导数的计算,这一般通过像素点亮度值与高斯核的某一方向偏导数卷积而成;在SURF算法里,为提高算法运行速度,在精度影响很小的情况下,近似的盒状滤波器(0,1,1组成的...因为滤波器仅有0,-1,1,因此卷积的计算可以积分图像(Integral image)来优化(O(1)的时间复杂度),大大提高了效率。...(img1, kp1, img2, kp2, matches): """ My own implementation of cv2.drawMatches as OpenCV 2.4.9...函数在下面的链接中有自己的实现,我直接复制过来了 http://stackoverflow.com/questions/20259025/module-object-has-no-attribute-drawmatches-opencv-python

1.3K20

OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%

现在使用该方式来表示这些关键点,我们可以在另一幅图中找到它们,这一步称为描述,因为每个角点附近的局部分块中的纹理由来自图像不同操作的数字向量表示(即描述)。...有很多描述符,但如果我们想要一些准确的东西,即使在移动电话或低功耗设备也能实时运行,OpenCV有两种重要的方法: ORB(Oriented FAST and Rotated BRIEF):一个经典的替代品...让我们使用暴力算法,基本比较第一个图像中的每个描述符与第二个图像中的所有描述符。当我们处理二进制描述符时,比较是汉明距离来完成的,也就是说,计算每对描述符之间不同的位数。...append(matched1[i]) inliers2.append(matched2[i]) 现在我们在inliers1和inliers2变量中具有正确的匹配项,我们可以使用cv.drawMatches...np.empty((max(img1.shape[0], img2.shape[0]), img1.shape[1] + img2.shape[1], 3), dtype=np.uint8) cv.drawMatches

1.1K31

opencv3.4+contribute编译及官方自带samples编译

环境:win10专业版+opencv3.4+contrib+VS2015 圣诞前夕,opencv悄悄发布了3.4版本,和3并没有很大的区别,听说是优化了DNN,这个还没用过,正好换了电脑,新电脑还没来得及配置...opencv_bin 这里的路径只是一个演示(我写这个的时候的是笔记本,笔记本配置的opencv不是自己编译来的那个)这里应该填的是:\opencv\build\install\x64\vc14...将匹配较好的特征点存入good_matches中 { good_matches.push_back(matches[i]); } Mat outimg; drawMatches...sift匹配结果 如果没有报错且成功出现结果,那么就好好享受opencv的魔力吧,编译之后opencv的所有源码都是可见的,用到什么函数的时候不懂只要在函数名右键跳转,就可以抵达源代码欣赏(被虐)了。...done 看到这里就说明成功生成了,这个图是我在笔记本编译samples,的还是3.3,不过编译过程是完全一样的。 生成解决方案。 2.1 打开解决方案。

2K10
领券