今天急需拼接几张差不多大小的图片,于是应用Opencv的一部分知识自己做了个程序:

python opencv 图像分割 python opencv 图像拼接_Storage


可以随意拼接图片(横着、竖着、任意指定图片个数)

源码如下:

import cv2
import numpy as np                         
import os
import pytesseract
from matplotlib import pyplot as plt
from PIL import Image



def image_add(image1,image2):
    h1,w1,c1 = image1.shape
    h2,w2,c2 = image2.shape
    if c1 != c2:
        print("channels NOT match, cannot merge")
        return 
    else:
        if w1 > w2:
            tmp = np.zeros([h2,w1-w2,c1])
            #image3 = np.hstack([image2,tmp])#水平
            image4 = np.vstack([image1,image2])#竖直
        elif w1 == w2:
            #image3 = np.hstack([image1,image2])
            image4 = np.vstack([image1,image2])
        else:
            tmp = np.zeros([h1,w2-w1,c2])
            #image3 = np.hstack([image1,tmp])
            image4 = np.vstack([image3,image2])
    
    #cv2.imshow('image3',image3)
    #cv2.imshow('image4',image4)
    cv2.imwrite(r"H:/Collected/95.jpg",image4)        #保存图像(“路径”,图像)

    print('OK!!!!!!')
    #cv2.waitKey(0)
    #return image3



def Test():
    filename = input("Please Input Your Image : \n")
    image = cv2.imread(filename,1)
    x,y,z = image.shape
    img = np.reshape(image,[x,y-1000])
    cv2.imshow("image",image)
    cv2.imshow("img",img)



def Process():
    N = int(input("How Many Pictures Do You Want To Stitch,But Please Don't Exceed Ten: \n"))
    if N > 10:
        print("Too Many Pictures You Entered!!!!!!!!!")
    else:
        filename = [0,0,0,0,0,0,0,0,0,0]
        image = [0,0,0,0,0,0,0,0,0,0]
        ave_H = 0
        ave_S = 0
        for i  in range(N):
            filename[i] = input("Please Input Your Image : \n")
            image[i] = cv2.imread(filename[i],1)
        mode = input("Please select stitching mode H or S: \n")
        Result = image[0]
        if mode == 'H':
            for i in range(N):
                ave_H = ave_H + int(image[i].shape[0] / N)
            print("%d"%(ave_H))
            #print("%d"%(image[0].shape[0]))
            for i in range(N-1):
                Result = np.hstack([Result,image[i+1]])
        if mode == 'S':
            for i in range(N):
                ave_S = ave_S + int(image[i].shape[1] / N)
            print("%d"%(ave_S))
            #print("%d"%(image[0].shape[1]))
            for i in range(N-1):
                Result = np.vstack([Result,image[i+1]])
    storeADD = input("Please Input A Storage Location : \n")
    cv2.imwrite(storeADD,Result)       


Process()