本文实例为大家分享了opencv2实现两张图像拼接融合的具体代码,供大家参考,具体内容如下
要用到两个文件,estimate.cpp和matcher.h(在有关鲁棒匹配这篇博文中有)
estimate.cpp的头文件也需要添加一些东西才行,以下是对的,已经成功运行。
加了using namespace std;之后,cv::可以去掉了。
estimate.cpp:
#include <iostream> #include <vector> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/calib3d/calib3d.hpp> #include<opencv2/nonfree/nonfree.hpp> #include<opencv2\legacy\legacy.hpp> #include "matcher.h" using namespace std; using namespace cv; int main() { // Read input images读入图像 cv::Mat image1= cv::imread("parliament1.bmp",0); cv::Mat image2= cv::imread("parliament2.bmp",0); if (!image1.data || !image2.data) return 0; // Display the images显示图像 cv::namedWindow("Image 1"); cv::imshow("Image 1",image1); cv::namedWindow("Image 2"); cv::imshow("Image 2",image2); // Prepare the matcher准备匹配 RobustMatcher rmatcher; rmatcher.setConfidenceLevel(0.98); rmatcher.setMinDistanceToEpipolar(1.0); rmatcher.setRatio(0.65f); cv::Ptr<cv::FeatureDetector> pfd= new cv::SurfFeatureDetector(10); rmatcher.setFeatureDetector(pfd); // Match the two images std::vector<cv::DMatch> matches; std::vector<cv::KeyPoint> keypoints1, keypoints2; cv::Mat fundemental= rmatcher.match(image1,image2,matches, keypoints1, keypoints2); // draw the matches画匹配结果 cv::Mat imageMatches; cv::drawMatches(image1,keypoints1, // 1st image and its keypoints第一张图像及其关键点 image2,keypoints2, // 2nd image and its keypoints第二张图像及其关键点 matches, // the matches匹配结果 imageMatches, // the image produced产生的图像 cv::Scalar(255,255,255)); // color of the lines线的颜色 cv::namedWindow("Matches"); cv::imshow("Matches",imageMatches); // Convert keypoints into Point2f将关键点转换为Point2f std::vector<cv::Point2f> points1, points2; for (std::vector<cv::DMatch>::const_iterator it= matches.begin(); it!= matches.end(); ++it) {H // Get the position of left keypoints得到左图关键点位置 float x= keypoints1[it->queryIdx].pt.x; float y= keypoints1[it->queryIdx].pt.y; points1.push_back(cv::Point2f(x,y)); // Get the position of right keypoints得到右图关键点位置 x= keypoints2[it->trainIdx].pt.x; y= keypoints2[it->trainIdx].pt.y; points2.push_back(cv::Point2f(x,y)); } std::cout << points1.size() << " " << points2.size() << std::endl; // Find the homography between image 1 and image 2找到图像1和图像2之间的单应性矩阵 std::vector<uchar> inliers(points1.size(),0); cv::Mat homography= cv::findHomography( cv::Mat(points1),cv::Mat(points2), // corresponding points对应点 inliers, // outputed inliers matches 输出内点匹配 CV_RANSAC, // RANSAC method RANSAC 方法 1.); // max distance to reprojection point到对应点的最大距离 // Draw the inlier points画内点 std::vector<cv::Point2f>::const_iterator itPts= points1.begin(); std::vector<uchar>::const_iterator itIn= inliers.begin(); while (itPts!=points1.end()) { // draw a circle at each inlier location在每一个内点画一个圈 if (*itIn) cv::circle(image1,*itPts,3,cv::Scalar(255,255,255),2); ++itPts; ++itIn; } itPts= points2.begin(); itIn= inliers.begin(); while (itPts!=points2.end()) { // draw a circle at each inlier location在每一个内点画一个圈 if (*itIn) cv::circle(image2,*itPts,3,cv::Scalar(255,255,255),2); ++itPts; ++itIn; } // Display the images with points显示画点的图像 cv::namedWindow("Image 1 Homography Points"); cv::imshow("Image 1 Homography Points",image1); cv::namedWindow("Image 2 Homography Points"); cv::imshow("Image 2 Homography Points",image2); // Warp image 1 to image 2变形图像1到图像2 cv::Mat result; cv::warpPerspective(image1, // input image输入的图像 result, // output image输出的图像 homography, // homography单应性矩阵 cv::Size(2*image1.cols,image1.rows)); // size of output image输出图像的大小 // Copy image 1 on the first half of full image复制图像1的上一部分 cv::Mat half(result,cv::Rect(0,0,image2.cols,image2.rows)); image2.copyTo(half); // Display the warp image显示变形后图像 cv::namedWindow("After warping"); cv::imshow("After warping",result); cv::waitKey(); return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍opencv实现多张图像拼接,包括了opencv实现多张图像拼接的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了opencv实现多张图像简单拼接,供大家参考,具体内容如下 效果如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍python实现两张图片的像素融合,包括了python实现两张图片的像素融合的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现两张图片像素融合的具体代码,供大家参考,具体内容如下 通过计算两张图片的颜色直方图特征,利用直方图对图片的颜色进行融合。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍OpenCV实现多图像拼接成一张大图,包括了OpenCV实现多图像拼接成一张大图的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV实现多图像拼接成大图的具体代码,供大家参考,具体内容如下 开始尝试merge函数,具体如下: 定义四个矩阵A,B,C,D。得到矩阵combine。 结果如下: 显然,不是我们需要的结果。 尝试hconcat和vconcat函数,这两
本文向大家介绍python实现图像拼接,包括了python实现图像拼接的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现图像拼接的具体代码,供大家参考,具体内容如下 1.待拼接的图像 2. 基于SIFT特征点和RANSAC方法得到的图像特征点匹配结果 3.图像变换结果 4.代码及注意事项 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
在机器学习中,灰度图像的特征提取是一个难题。 我有一个灰色的图像,是用这个从彩色图像转换而来的。 我实际上需要从这张灰色图片中提取特征,因为下一部分将训练一个具有该特征的模型,以预测图像的彩色形式。 我们不能使用任何深度学习库 有一些方法,如快速筛选球。。。但我真的不知道如何才能为我的目标提取特征。 以上代码的输出就是真的。 有什么解决方案或想法吗?我该怎么办?
本文向大家介绍python实现多张图片拼接成大图,包括了python实现多张图片拼接成大图的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现多张图片拼接成大图的具体代码,供大家参考,具体内容如下 上次爬取了马蜂窝的游记图片,并解决了PIL模块的导入问题,现在直奔主题吧: 前边设置了很多变量,都很直观,然后时获取图片的名称以及对需要拼接图片的数量进行检查,比如你要拼接5*