zoukankan      html  css  js  c++  java
  • python opencv图片拼接源码

    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)
  • 相关阅读:
    生成指定规模大小的redis cluster对关系
    根据ip列表模拟输出redis cluster的主从对应关系
    获取redis实例绑定cpu的情况
    通过shell模拟redis-trib.rb info的输出
    又一种获取redis cluster slots分布的小脚本
    第3种方法获取redis cluster主从关系
    Lamada
    Linq笔记
    推荐博文
    SQL server 自带存储过程 sp_rename
  • 原文地址:https://www.cnblogs.com/caiya/p/15103948.html
Copyright © 2011-2022 走看看