import cv2
import numpy as np
import time
def image_handle(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
grayshape=gray.shape
print('图片大小',grayshape)
high=grayshape[0]
width=grayshape[1]
cuty1=500
cuty2=0
gray_cut = gray[cuty1:int(high)-cuty2, int(width/2)-100:int(width/2)+100]
gray_sample = gray[int(high)-20:int(high), int(width/2)-100:int(width/2)+100]
print('采样区平均像素值:',np.mean(gray_sample))
sample_value = np.mean(gray_sample)
ret, binary = cv2.threshold(gray_cut, sample_value - 15, 255, cv2.THRESH_BINARY)
print("threshold value %s" % ret)
img_300x300 = cv2.copyMakeBorder(binary, 30, 30, 30, 30,
cv2.BORDER_CONSTANT,
value=255)
contours, heriachy = cv2.findContours(img_300x300, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
cv2.drawContours(img_300x300, contours, i, 128, 2)
mylist = []
for i in range(len(contours)):
if len(contours[i]) > 5:
mylist.append(i)
dx = []
dy = []
for j in range(len(mylist)):
a = contours[mylist[j]]
for i in range(len(a)):
b = a[i]
c = b[0]
if (c[0] > 226):
dx.append(c[0])
dy.append(c[1])
ndy = len(dy)
di = 0
for i in range(ndy):
if dy[i - di] < (max(dy) - 3):
del dy[i - di]
del dx[i - di]
di = di + 1
dxa = np.mean(dx)+int(width/2)-100-30
dya = np.mean(dy)+cuty1-30
return dxa,dya
def image_stitching(image_after,image2_before):
m1 = image_handle(image_after)
# cv2.circle(image_after, (int(m1[0]), int(m1[1])), 10, (0, 0, 255), -1)
m2 = image_handle(image2_before)
# cv2.circle(image2_before, (int(m2[0]), int(m2[1])), 10, (0, 0, 255), -1)
d = int(m1[1] - m2[1])
print(d)
image2_shape = image2_before.shape
print('图片大小', image2_shape)
high = image2_shape[0]
width = image2_shape[1]
image2_before1 = image2_before[0:high - d, 0:width]
image2_before2 = cv2.copyMakeBorder(image2_before1, d, 0, 0, 0,
cv2.BORDER_CONSTANT,
value=0)
img_stitching = np.where(image_after < image2_before2, image2_before2, image_after)
return img_stitching
if __name__ == "__main__":
start = time.time()
print(start)
src = cv2.imread('po3_I135.jpg')
src1 = cv2.imread('po1_I135.jpg')
src3=image_stitching(src,src1)
cv2.namedWindow('dddddd', 0)
cv2.imshow('dddddd', src3)
print(time.time()-start)
cv2.waitKey(0)