chen041123 2024-09-21 23:21 采纳率: 100%
浏览 2
已结题

用stitcher类做图像拼接显示拼接不成功

img


img

img

在对3个图像用stitcher类进行图像拼接时显示拼接不成功。想问问这种线条图是不是不可以进行拼接,然后有啥解决方案
现有代码如下:

#include <iostream>  
#include <stdio.h>  
#include <opencv2/stitching.hpp>
#include < opencv2/opencv.hpp > 
#include <fstream>

using namespace cv;
using namespace std;

int main()
{
    vector<Mat> imgs;
    Mat image1, image2, image3;

    image1 = imread("E:/环传感器/camera1.jpg");
    image2 = imread("E:/环传感器/camera2.jpg");
    image3 = imread("E:/环传感器/camera3.jpg");
    
    imshow("原图1", image1);
    imshow("原图2", image2);
    imshow("原图3", image3);
    imgs.push_back(image1);
    imgs.push_back(image2);
    imgs.push_back(image3);
    Ptr<Stitcher> stitcher = Stitcher::create();//调用create方法
    Mat pano;
    Stitcher::Status status = stitcher->stitch(imgs, pano);    // 使用stitch函数进行拼接
    if (status != Stitcher::OK)
    {
        cout << "Can't stitch images, error code = " << int(status) << endl;
        return -1;
    }
    // 显示结果图像
    imshow("全景图像", pano);
    waitKey(0);
}

这个是日志截图,看不太懂,但好像从一开始就失败了

img

  • 写回答

2条回答 默认 最新

  • 科技梦想家 2024-09-21 23:32
    关注

    以下内容由AIGC 及 gpt.4o 科技梦想家 共同回答解决方案、有用望采纳:

    线条图拼接可能会因为缺乏明显的特征点而导致失败。可以尝试以下解决方案:

    增加特征点:对图像进行预处理,如使用图像增强技术,提高特征的可识别性。
    调整参数:尝试调整Stitcher类的配置参数,例如使用不同的拼接模式。
    使用不同的拼接算法:考虑使用其他图像拼接库或算法,如OpenCV中的ORB或SIFT特征匹配。
    手动标定:如果可能,手动选择关键点进行匹配,以提高拼接的成功率。
    可以按照以下步骤具体解决图像拼接问题:

    图像预处理:

    使用图像处理库(如OpenCV)增强图像对比度,增加特征点的可见性。例如:

    import cv2
    
    img = cv2.imread('image.jpg')
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img_enhanced = cv2.equalizeHist(img_gray)  # 直方图均衡化
    
    
    

    选择特征检测算法:

    使用特征检测算法如ORB、SIFT或SURF,以找到更好的特征点

    orb = cv2.ORB_create()
    keypoints, descriptors = orb.detectAndCompute(img_enhanced, None)
    
    
    

    使用拼接类进行拼接:

    使用Stitcher类进行拼接时,确保所有输入图像都是处理后的图像

    stitcher = cv2.Stitcher_create()
    status, stitched = stitcher.stitch([img1, img2, img3])  # 处理后的图像列表
    if status == cv2.Stitcher_OK:
        cv2.imwrite('result.jpg', stitched)
    else:
        print("拼接失败")
    
    
    

    调整Stitcher参数:

    如果拼接失败,可以尝试使用不同的模式:

    stitcher = cv2.Stitcher_create(cv2.Stitcher_PANORAMA)  # 使用全景模式
    
    
    

    手动标定关键点:

    如果自动拼接效果不理想,可以手动选择一些匹配点,并使用RANSAC等算法进行配准。
    逐步调试:

    可以逐步调试每一步的输出,查看图像特征点是否正确匹配。
    这些步骤可以帮助你解决图像拼接的问题。你可以根据具体情况进行调整。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 今天
  • 已采纳回答 9月22日
  • 修改了问题 9月22日
  • 修改了问题 9月21日
  • 展开全部

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?