精华内容
下载资源
问答
  • MATLAB 程序 实现图像拼接,自动匹配特征点 将图片拼接成长图,MATLAB 程序 实现图像拼接,自动匹配特征点 将图片拼接成长图MATLAB 程序 实现图像拼接,自动匹配特征点 将图片拼接成长图
  • halcon实现图像拼接

    2020-08-18 16:45:24
    使用halcon实现图像拼接:激光扫码取得1520张图片,每张图片1920*64,归一化图像后合成位一张1920*1520图像
  • python实现图像拼接

    2020-09-17 18:44:29
    主要为大家详细介绍了python实现图像拼接,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 基于python-opencv实现图像拼接,包含示例图片
  • 主要为大家详细介绍了python实现图像拼接功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 本文实例为大家分享了利用python和OpenCV实现图像拼接,供大家参考,具体内容如下python+OpenCV实现image stitching在最新的OpenCV官方文档中可以找到C++版本的Stitcher类的说明, 但是python版本的还没有及时更新, ...

    本文实例为大家分享了利用python和OpenCV实现图像拼接,供大家参考,具体内容如下

    python+OpenCV实现image stitching

    在最新的OpenCV官方文档中可以找到C++版本的Stitcher类的说明, 但是python版本的还没有及时更新, 本篇对python版本的实现做一个简单的介绍.

    由于官方文档中还没有python版本的Stitcher类的说明, 因此只能自己去GitHub源码上找, 以下是stitching的样例:

    from __future__ import print_function

    import cv2 as cv

    import numpy as np

    import argparse

    import sys

    modes = (cv.Stitcher_PANORAMA, cv.Stitcher_SCANS)

    parser = argparse.ArgumentParser(description='Stitching sample.')

    parser.add_argument('--mode',

    type = int, choices = modes, default = cv.Stitcher_PANORAMA,

    help = 'Determines configuration of stitcher. The default is `PANORAMA` (%d), '

    'mode suitable for creating photo panoramas. Option `SCANS` (%d) is suitable '

    'for stitching materials under affine transformation, such as scans.' % modes)

    parser.add_argument('--output', default = 'result.jpg',

    help = 'Resulting image. The default is `result.jpg`.')

    parser.add_argument('img', nargs='+', help = 'input images')

    args = parser.parse_args()

    # read input images

    imgs = []

    for img_name in args.img:

    img = cv.imread(img_name)

    if img is None:

    print("can't read image " + img_name)

    sys.exit(-1)

    imgs.append(img)

    stitcher = cv.Stitcher.create(args.mode)

    status, pano = stitcher.stitch(imgs)

    if status != cv.Stitcher_OK:

    print("Can't stitch images, error code = %d" % status)

    sys.exit(-1)

    cv.imwrite(args.output, pano);

    print("stitching completed successfully. %s saved!" % args.output)

    上面写了一大堆, 然鹅, 直接拿来用的话, 用下面的代码可以了, 简单粗暴

    ```python

    import numpy as np

    import cv2

    from cv2 import Stitcher

    if name == "main":

    img1 = cv2.imread('1.jpg')

    img2 = cv2.imread('2.jpg')

    stitcher = cv2.createStitcher(False)

    #stitcher = cv2.Stitcher.create(cv2.Stitcher_PANORAMA), 根据不同的OpenCV版本来调用

    (_result, pano) = stitcher.stitch((img1, img2))

    cv2.imshow('pano',pano)

    cv2.waitKey(0)

    ```

    效果如下:

    原图:

    202035102627746.jpg

    202035102720616.jpg

    拼接后的图像:

    1596788716.jpg

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持python博客。

    展开全文
  • matlab实现图像拼接

    2020-08-17 16:41:42
    使用matlab进行图像拼接图像拼接技术包括三大部分:特征点提取与匹配、图像配准、图像融合。图像拼接是一项应用广泛的图像处理技术。根据特征点的相互匹配,可以将多张小视角的图像拼接成为一张大视角的图像,在...
  • 主要为大家详细介绍了python+OpenCV实现图像拼接,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 利用 SIFT 实现图像拼接:https://goodgoodstudy.blog.csdn.net/article/details/89157849
  • 在GPU上快速实现图像拼接
  • matlab实现图像拼接的代码
  • Java实现图片拼接

    2020-08-27 02:14:01
    主要为大家详细介绍了Java实现图片拼接的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python实现图片拼接

    2018-04-19 22:09:02
    python3实现图片拼接,对于做验证码的朋友应该用的到,亲测可实现。不要犹豫,想实现图片拼合可下载查看
  • 本文实例为大家分享了利用python和OpenCV实现图像拼接,供大家参考,具体内容如下python+OpenCV实现image stitching在最新的OpenCV官方文档中可以找到C++版本的Stitcher类的说明, 但是python版本的还没有及时更新, ...

    本文实例为大家分享了利用python和OpenCV实现图像拼接,供大家参考,具体内容如下

    python+OpenCV实现image stitching

    在最新的OpenCV官方文档中可以找到C++版本的Stitcher类的说明, 但是python版本的还没有及时更新, 本篇对python版本的实现做一个简单的介绍.

    由于官方文档中还没有python版本的Stitcher类的说明, 因此只能自己去GitHub源码上找, 以下是stitching的样例:

    from __future__ import print_function

    import cv2 as cv

    import numpy as np

    import argparse

    import sys

    modes = (cv.Stitcher_PANORAMA, cv.Stitcher_SCANS)

    parser = argparse.ArgumentParser(description='Stitching sample.')

    parser.add_argument('--mode',

    type = int, choices = modes, default = cv.Stitcher_PANORAMA,

    help = 'Determines configuration of stitcher. The default is PANORAMA (%d), '

    'mode suitable for creating photo panoramas. Option SCANS (%d) is suitable '

    'for stitching materials under affine transformation, such as scans.' % modes)

    parser.add_argument('--output', default = 'result.jpg',

    help = 'Resulting image. The default is result.jpg.')

    parser.add_argument('img', nargs='+', help = 'input images')

    args = parser.parse_args()

    read input images

    imgs = []

    for img_name in args.img:

    img = cv.imread(img_name)

    if img is None:

    print("can't read image " + img_name)

    sys.exit(-1)

    imgs.append(img)

    stitcher = cv.Stitcher.create(args.mode)

    status, pano = stitcher.stitch(imgs)

    if status != cv.Stitcher_OK:

    print("Can't stitch images, error code = %d" % status)

    sys.exit(-1)

    cv.imwrite(args.output, pano);

    print("stitching completed successfully. %s saved!" % args.output)

    上面写了一大堆, 然鹅, 直接拿来用的话, 用下面的代码可以了, 简单粗暴

    import numpy as np

    import cv2

    from cv2 import Stitcher

    if name == "main":

    img1 = cv2.imread('1.jpg')

    img2 = cv2.imread('2.jpg')

    stitcher = cv2.createStitcher(False)

    stitcher = cv2.Stitcher.create(cv2.Stitcher_PANORAMA), 根据不同的OpenCV版本来调用

    (_result, pano) = stitcher.stitch((img1, img2))

    cv2.imshow('pano',pano)

    cv2.waitKey(0)

    效果如下:

    原图:

    202035102607878.jpg

    202035102627746.jpg

    拼接后的图像:

    202035102720616.jpg

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持菜鸟教程www.piaodoo.com。

    展开全文
  • 图像拼接的一些资料-相位相关法实现图像拼接的仿真与优化.pdf 本人手中有若干关于图像拼接的资料,想要的拿去,顺便赚点M币。
  • python实实现现图图像像拼拼接接功功能能 这篇文章主要为大家详细介绍了python实现图像拼接功能文中示例代码介绍的非常详细具有一定的参考价 值感兴趣的 伙伴们可以参考一下 利用Python将Market1501的分割图片和原图...
  • 基于halcon角点检测实现图像拼接。例子是三张图中进行harris角点检测,然后进行匹配,模式识别,图像融合
  • 本文实例为大家分享了OpenCV实现图像拼接成大图的具体代码,供大家参考,具体内容如下开始尝试merge函数,具体如下:定义四个矩阵A,B,C,D。得到矩阵combine。#include#include #include #include using namespace ...

    本文实例为大家分享了OpenCV实现多图像拼接成大图的具体代码,供大家参考,具体内容如下

    开始尝试merge函数,具体如下:

    定义四个矩阵A,B,C,D。得到矩阵combine。

    #include

    #include

    #include

    #include

    using namespace std;

    using namespace cv;

    int main()

    {

    cv::Mat a = (cv::Mat_(2,2)<<1,2,3,4);

    cv::Mat b = (cv::Mat_(2,2)<<5,6,7,8);

    cv::Mat c = (cv::Mat_(2,2)<<9,10,11,12);

    cv::Mat d = (cv::Mat_(2,2)<<13,14,15,16);

    std::vector<:mat> v1;

    v1.push_back(a);

    v1.push_back(b);

    v1.push_back(c);

    v1.push_back(d);

    cv::Mat combine;

    cv::merge(v1, combine);

    cout << "combine=" <

    cout<

    system("pause");

    return 0;

    }

    结果如下:

    1f67cb93327b55c14578df2ca765609f.png

    显然,不是我们需要的结果。

    尝试hconcat和vconcat函数,这两个函数opencv本身并没有。

    具体实现如下:

    #include

    #include

    #include

    #include

    using namespace std;

    using namespace cv;

    int main()

    {

    cv::Mat a = (cv::Mat_(2,2)<<1,2,3,4);

    cv::Mat b = (cv::Mat_(2,2)<<5,6,7,8);

    cv::Mat c = (cv::Mat_(2,2)<<9,10,11,12);

    cv::Mat d = (cv::Mat_(2,2)<<13,14,15,16);

    Mat combine,combine1,combine2;

    hconcat(a,b,combine1);

    hconcat(c,d,combine2);

    vconcat(combine1,combine2,combine);

    //namedWindow("Combine",CV_WINDOW_AUTOSIZE);

    //imshow("Combine",combine);

    cout<

    system("pause");

    return 0;

    }

    结果:

    eb9b246613154c1d611979f49304dd1f.png

    图像拼接实现

    #include

    #include

    #include

    #include

    using namespace std;

    using namespace cv;

    int main()

    {

    //cv::Mat a = (cv::Mat_(2,2)<<1,2,3,4);

    //cv::Mat b = (cv::Mat_(2,2)<<5,6,7,8);

    //cv::Mat c = (cv::Mat_(2,2)<<9,10,11,12);

    //cv::Mat d = (cv::Mat_(2,2)<<13,14,15,16);

    Mat combine,combine1,combine2;

    Mat a=imread("1.jpg");

    Mat b=imread("2.jpg");

    Mat c=imread("3.jpg");

    Mat d=imread("4.jpg");

    hconcat(a,b,combine1);

    hconcat(c,d,combine2);

    vconcat(combine1,combine2,combine);

    namedWindow("Combine",CV_WINDOW_AUTOSIZE);

    imshow("Combine",combine);

    waitKey(0);

    //cout<

    system("pause");

    return 0;

    }

    图像结果显示如下:

    3083a65c8470b26942eb893642d61e0f.png

    ffb7281fdfa1f90b48fdf8fc8e509286.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 在Qt中调用Opencv,利用SIFT算法实现图像拼接,代码结构明了,能快速上手。
  • 图像拼接算法及实现 图像拼接

    热门讨论 2010-03-24 03:01:55
    图像拼接(image mosaic)技术是将一组相互间重叠部分的图像序列进行空间匹配对准,经重采样合成后形成一幅包含各图像序列信息的宽视角场景的、完整的、高清晰的新图像的技术。图像拼接在摄影测量学、计算机视觉、遥感...
  • 易语言实现图片拼接源码,两张图片拼接为一张,支持上下拼接和左右拼接,图片自动居中。
  • 本文通过实例代码给大家介绍了python实现图片拼接的方法,非常不错,具有一定的参考借鉴借鉴价值,需要的朋友参考下吧
  • 用不同尺度(标准差)的高斯函数对图像进行平滑,然后比较平滑后图像的差别, 差别大的像素就是特征明显的点。 该算法主要包括5个步骤进行匹配: 1、构建尺度空间,检测极值点,获得尺度不变性; 2、特征点过滤并...
  • 用matlab实现图像拼接

    2014-05-03 19:15:13
    用matlab 实现ransac算法的图像拼接
  • python 实现图像拼接

    2020-12-30 17:05:22
    图像拼接,顾名思义,就是将两张或多张图像拼接一起,其关键就是找到两张图像的重叠部分,通过重叠部分实现拼接。 所以,关键可以概括为两部分,一是如何找到重叠部分,在图像处理中称为特征点的提取和匹配;二是...

    之前被要求做一个和图像拼接的项目,学习了图像拼接的原理和实践,在这里记录一下,包括基本的原理和用python写出的代码。
    图像拼接,顾名思义,就是将两张或多张图像拼接一起,其关键就是找到两张图像的重叠部分,通过重叠部分实现拼接。
    所以,关键可以概括为两部分,一是如何找到重叠部分,在图像处理中称为特征点的提取和匹配;二是根据重叠部分来叠加图像,将右图根据重叠部分覆盖到左图上。

    拼接的步骤

    1.对每幅图做特征提取,再对两幅图做特征匹配。
    2.图像配准及误匹配点的去除,即根据匹配的特征点找出重叠部分的对应坐标,并求出对应坐标转换的矩阵homography。
    3.根据转换矩阵将右图拷贝到左图的指定位置上。
    4.对重叠的边界做特殊处理,如平滑处理、去裂缝处理、过渡等。

    特征点提取算法:
    (1)SIFT算法:尺度不变特征转换
    (2)SURF算法:加速稳健特征
    (3)ORB算法
    它们都具有尺度不变的特征,即两幅图像中不同尺度的同一物体点,两个尺度因子之间的比率应等同与图像尺度的比率。
    特征点即为关键点,一般为角点、边缘点、暗区域的亮点、亮区域的暗点、局部极值点。
    SIFT为最基础的算法,SURF和ORB都是在SIFT的基础进行修改,提升了运算的速度。

    特征点匹配算法:
    (1)BF算法
    (2)FLANN算法

    使用python和opencv库函数实现
    ORB算法:

    # ORB
    def orb_extract(img1, img2):
        orb = cv2.ORB_create(10)
        kp1, des1 = orb.detectAndCompute(img1, None)
        kp2, des2 = orb.detectAndCompute(img2, None)
        # BF
        bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
        matches = bf.match(des1, des2)
        matches = sorted(matches, key=lambda x: x.distance)
        key_number1 = len(kp1)
        key_number2 = len(kp2)
        match_number = len(matches)
        max_number = np.maximum(key_number1, key_number2)
        score = float(float(match_number) / float(max_number))
        img_orb = cv2.drawMatches(img1, kp1, img2, kp2, matches[:50], img2, flags=2)
        return img_orb, score
    

    SURF算法:

    # SURF
    def surf_extract(img1, img2):
        surf = cv2.xfeatures2d.SURF_create(100)
        # surf.setHessianThreshold(10000)
        # SIFT:cv2.xfeatures2d.SIFT_create()
        # SURF:cv2.xfeatures2d.SURF_create(hessianThreshold, nOctaves, nOctaveLayers, extended, upright)
        key1, describe1 = surf.detectAndCompute(img1, None)
        img11 = cv2.drawKeypoints(img1, key1, img1, color=(255, 0, 0))
        key2, describe2 = surf.detectAndCompute(img2, None)
        img12 = cv2.drawKeypoints(img2, key2, img2, color=(255, 0, 0))
        # FLANN
        FLANN_INDEX_KDTREE = 0
        index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
        search_params = dict(checks=50)
        flann = cv2.FlannBasedMatcher(index_params, search_params)
        match = flann.knnMatch(describe1, describe2, k=2)
        key_number1 = len(key1)
        key_number2 = len(key2)
        match_number = len(match)
        max_number = np.maximum(key_number1, key_number2)
        good = []
        for m, n in match:
            if m.distance < 0.75 * n.distance:
                good.append([m])
                # print("m:", m)
        good_number = len(good)
        # print("good:", good_number)
        score = float(float(good_number)/float(max_number))
        img_surf = cv2.drawMatchesKnn(img1, key1, img2, key2, good, None, flags=2)
        return img_surf, score
    

    SIFT算法:

    def sift_extract(img1, img2):
        # SIFT
        sift = cv2.xfeatures2d.SURF_create(100)
        key1, describe1 = sift.detectAndCompute(img1, None)
        img11 = cv2.drawKeypoints(img1, key1, img1, color=(255, 0, 0))
        key2, describe2 = sift.detectAndCompute(img2, None)
        img12 = cv2.drawKeypoints(img2, key2, img2, color=(255, 0, 0))
        # FLANN
        FLANN_INDEX_KDTREE = 0
        index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
        search_params = dict(checks=50)
        flann = cv2.FlannBasedMatcher(index_params, search_params)
        match = flann.knnMatch(describe1, describe2, k=2)
        key_number1 = len(key1)
        key_number2 = len(key2)
        match_number = len(match)
        max_number = np.maximum(key_number1, key_number2)
        score = float(float(match_number) / float(max_number))
        img_sift = cv2.drawMatchesKnn(img1, key1, img2, key2, match, None, flags=2)
        return img_sift, score
    

    特征提取和匹配的主函数:

    def main():
        img1 = cv2.imread("a.PNG")
        img2 = cv2.imread("b.PNG")
        img3, score_orb = orb_extract(img1, img2)
        plt.subplot(311), plt.imshow(img3),
        plt.title('ORB'), plt.axis('off')
        img4, score_surf = surf_extract(img1, img2)
        plt.subplot(312), plt.imshow(img4),
        plt.title('SURF'), plt.axis('off')
        img5, score_sift = sift_extract(img1, img2)
        plt.subplot(313), plt.imshow(img5),
        plt.title('SIFT'), plt.axis('off')
        print("surf:", score_surf)
        print("sift:", score_sift)
        plt.show()
    
    
    if __name__ == "__main__":
        main()
    

    效果:
    在这里插入图片描述SIFT算法的特征点一般都是最多的。

    图像拼接的最大难度应是特征点的提取与匹配了,这里就详细介绍这个部分,其余步骤可大概了解。

    这里附上图像拼接的全部代码:

    # 图像拼接
    
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    import time
    
    
    MIN = 10
    start_time = time.time()
    m1 = cv.imread('a.PNG')
    img2 = cv.imread('b.PNG')
    
    height2 = int(img2.shape[0])
    width2 = int(img2.shape[1])
    dim = (width2, height2)
    
    img1 = cv.resize(m1, dim, interpolation=cv.INTER_AREA)
    
    gray1 = cv.cvtColor(img1, cv.COLOR_RGB2GRAY)
    gray2 = cv.cvtColor(img2, cv.COLOR_RGB2GRAY)
    
    print('img1 Dimensions : ', img1.shape)
    print('img2 Dimensions : ', img2.shape)
    plt.imshow(img1, ), plt.show()
    plt.imshow(img2, ), plt.show()
    
    # SURF
    surf = cv.xfeatures2d.SURF_create(10000, nOctaves=4, extended=False, upright=True)
    gray1 = cv.cvtColor(img1, cv.COLOR_RGB2GRAY)
    gray2 = cv.cvtColor(img2, cv.COLOR_RGB2GRAY)
    
    kp1, describe1 = surf.detectAndCompute(gray1, None)
    kp2, describe2 = surf.detectAndCompute(gray2, None)
    
    # FLANN
    FLANN_INDEX_KDTREE = 0
    indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    searchParams = dict(checks=50)
    
    flann = cv.FlannBasedMatcher(indexParams, searchParams)
    match = flann.knnMatch(describe1, describe2, k=2)
    
    good = []
    for i, (m, n) in enumerate(match):
        if m.distance < 0.75 * n.distance:
            good.append(m)
    ##################################
    # RANSAC:findhomography
    if len(good) > MIN:
        src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
        ano_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
        M, mask = cv.findHomography(src_pts, ano_pts, cv.RANSAC, 5.0)
        warpImg = cv.warpPerspective(img2, np.linalg.inv(M), (img1.shape[1] + img2.shape[1], img2.shape[0]))
        direct = warpImg.copy()
        direct[0:img1.shape[0], 0:img1.shape[1]] = img1
        simple = time.time()
    ###################################
    
        # cv.namedWindow("Result", cv.WINDOW_NORMAL)
        # cv.imshow("Result",warpImg)
        rows, cols = img1.shape[:2]
    
        left = 0
        right = cols
    
        for col in range(0, cols):
            if img1[:, col].any() and warpImg[:, col].any():  # 开始重叠的最左端
                left = col
            break
    
        for col in range(cols - 1, 0, -1):
            if img1[:, col].any() and warpImg[:, col].any():  # 重叠的最右一列
                right = col
            break
    
        res = np.zeros([rows, cols, 3], np.uint8)
    
        for row in range(0, rows):
            for col in range(0, cols):
                if not img1[row, col].any():
                    res[row, col] = warpImg[row, col]
                elif not warpImg[row, col].any():
                    res[row, col] = img1[row, col]
                else:
                    srcImgLen = float(abs(col - left))
                    testImgLen = float(abs(col - right))
                    alpha = srcImgLen / (srcImgLen + testImgLen)
                    res[row, col] = np.clip(img1[row, col] * (1 - alpha) + warpImg[row, col] * alpha, 0, 255)
    
        warpImg[0:img1.shape[0], 0:img1.shape[1]] = res
        final = time.time()
        img3 = cv.cvtColor(direct, cv.COLOR_BGR2RGB)
        plt.imshow(img3, ), plt.show()
        img4 = cv.cvtColor(warpImg, cv.COLOR_BGR2RGB)
        plt.imshow(img4, ), plt.show()
        print("simple stitch cost %f" % (simple - start_time))
        print("\n total cost %f" % (final - start_time))
        # cv.imwrite("simpletons.png", direct)
        # cv.imwrite("bestowal.png", warpImg)
        cv.imshow("pictures", img4)
        cv.waitKey()
        cv.destroyAllWindows()
    
    else:
        print("not enough matches!")
    
    

    效果:
    在这里插入图片描述

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,686
精华内容 29,474
关键字:

如何实现图像拼接