当前位置: 首页 > article >正文

图像镶嵌拼接

#include <opencv2/opencv.hpp>
#include <vector>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    // 定义图像路径
    String img1_path = "image1.tif";
    String img2_path = "image2.tif";

    // 读取图像
    Mat img1 = imread(img1_path, IMREAD_GRAYSCALE);
    Mat img2 = imread(img2_path, IMREAD_GRAYSCALE);

    // SIFT特征点检测
    Ptr<Feature2D> sift = SIFT::create();
    vector<KeyPoint> kp1, kp2;
    Mat des1, des2;
    sift->detectAndCompute(img1, noArray(), kp1, des1);
    sift->detectAndCompute(img2, noArray(), kp2, des2);

    // 特征点匹配
    BFMatcher matcher;
    vector<vector<DMatch>> matches;
    matcher.knnMatch(des1, des2, matches, 2);

    // 筛选匹配结果
    vector<DMatch> good_matches;
    for (int i = 0; i < matches.size(); ++i) {
        if (matches[i][0].distance < 0.75 * matches[i][1].distance) {
            good_matches.push_back(matches[i][0]);
        }
    }

    // 获取匹配点坐标
    vector<Point2f> src_pts, dst_pts;
    for (int i = 0; i < good_matches.size(); ++i) {
        src_pts.push_back(kp1[good_matches[i].queryIdx].pt);
        dst_pts.push_back(kp2[good_matches[i].trainIdx].pt);
    }

    // 计算变换矩阵
    Mat H = findHomography(src_pts, dst_pts, RANSAC, 5.0);

    // 拼接图像
    Mat result;
    warpPerspective(img1, result, H, Size(img1.cols + img2.cols, img1.rows));
    Mat roi(result, Rect(0, 0, img2.cols, img2.rows));
    img2.copyTo(roi);

    // 显示拼接结果
    imshow("Mosaic", result);
    waitKey(0);
    return 0;
}
 


http://www.kler.cn/a/6610.html

相关文章:

  • Golong中无缓冲的 channel 和 有缓冲的 channel 的区别
  • Go 语言常量
  • CLION中运行远程的GUI程序
  • Hive解决数据倾斜
  • 介绍 Html 和 Html 5 的关系与区别
  • 【Vulkan入门】16-IndexBuffer
  • ToBeWritten之MIPS汇编基础铺垫
  • aspnet030高校学生团体管理系统sqlserver
  • 夜天之书 #80 推特开源算法与开放革命
  • RocketMQ消息ACK机制及消费进度管理
  • Linux——控制启动过程(更改root密码)
  • springcloud整合knike4j聚合微服务接口文档
  • 蓝桥杯 路径
  • 2.11 循环赛日程表
  • 编译与链接相关知识
  • 推荐一款强大的OCR工具
  • Golang电脑上怎么下载-Go安装和环境配置图文教程[超详细]
  • 联想服务器上安装 ffmpeg
  • 照片太大怎么压缩变小一点,分享5个简单方法
  • 组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测
  • OJ系统刷题 第一篇
  • leetcode 152 乘积最大子数组
  • 无证驾驶叉车而导致人员死亡的事故!【安装叉车指纹锁、司机权限采集器的重要性】
  • 基于Java+SSM+jsp的教学质量评价系统设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】
  • ToBeWritten之理解嵌入式Web HTTP协议
  • 每日学术速递4.6