栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

OpenCV中图像拼接的一些基础知识

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenCV中图像拼接的一些基础知识

OpenCV中图像拼接代码
  • 一、数据结构和数据的基本定义
    • 1、【OpenCV】KeyPoint数据结构
    • 2、OpenCV 之 特征匹配
    • 3、Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
  • 二、具体的代码
    • 对匹配点进行显示

一、数据结构和数据的基本定义 1、【OpenCV】KeyPoint数据结构

【OpenCV】KeyPoint数据结构
讲解了KeyPoint数据结构的细节信心

2、OpenCV 之 特征匹配

OpenCV 之 特征匹配
讲解了特征匹配的两种方法:暴力匹配 (Brute force matching) 和 最近邻匹配 (Nearest Neighbors matching)

3、Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?

Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
说明了keyPoints、描述子Mat矩阵和配对向量DMatch的一些结构性的内容。

二、具体的代码 对匹配点进行显示
Mat preGrayframe;
Mat curGrayframe;
cvtColor(preframe, preGrayframe, COLOR_BGR2GRAY, 1);
cvtColor(curframe, curGrayframe, COLOR_BGR2GRAY, 1);
imshow("preframe", preframe);
waitKey(1);

Ptr detector = SurfFeatureDetector::create();           //提取特征点
//Ptr extractor = SurfDescriptorExtractor::create();
Ptr matcher = BFMatcher::create();           //这里填写匹配方式,Brute-force matcher create method.暴力匹配,它们都继承自 DescriptorMatcher,是基于特征描述符距离的匹配,根据描述符的不同,距离可以是 欧氏距离,也可以是 汉明距

vector preKeyPoints, curKeyPoints;           //存储特征点(关键点)
Mat preDescriptors, curDescriptors;           //存储

//检测关键点并计算其周围区域的描述符(descriptors),这个描述符用于特征点的匹配,然后将它们扭曲成圆圈。
detector->detectAndCompute(preGrayframe, Mat(), preKeyPoints, preDescriptors);           
detector->detectAndCompute(curGrayframe, Mat(), curKeyPoints, curDescriptors);           

//输出检测到的关键点的大小和描述符
cout << "Total keypoints: " << preKeyPoints.size() << endl;
cout << "Total keypoints: " << preKeyPoints.size() << endl;
cout << "preDescriptors:   " << preDescriptors.size() << endl;
imshow("preDescriptors", preDescriptors);
imshow("curDescriptors", curDescriptors);
waitKey(1);


//通过两阶段优化matches
vector matches, goodMatches1, goodMatches2;           //存储匹配的特征对(配对向量)
matcher->match(preDescriptors, curDescriptors, matches);           //前后两帧的特征点进行配对

//显示前一帧和当前帧的匹配图像
cout << "play" << endl;
Mat first_match;
drawMatches(preframe, preKeyPoints, curframe, curKeyPoints, matches, first_match);
imshow("first_match ", first_match);
waitKey(1);
cout << "over" << endl;

注意:其中preframe和curframe必须是原始图像(三通道图像)或者其他规定的格式。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号