今天急需拼接几张差不多大小的图片,于是应用Opencv的一部分知识自己做了个程序:
可以随意拼接图片(横着、竖着、任意指定图片个数)
源码如下:
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()