stitching icon indicating copy to clipboard operation
stitching copied to clipboard

多张图咋弄啊

Open papa-cmd opened this issue 4 years ago • 6 comments

papa-cmd avatar Sep 09 '21 07:09 papa-cmd

多张图片可以两两计算 耗时应该还是可以接受的 具体可以参考下 iphone的 picsew这个软件 或者微信搜索 易飞拼图这个小程序 都是类似的

bikerr avatar Sep 09 '21 07:09 bikerr

多张图片可以两两计算 耗时应该还是可以接受的 具体可以参考下 iphone的 picsew这个软件 或者微信搜索 易飞拼图这个小程序 都是类似的

两两计算貌似不行呀!需要两张图片尺寸一样才可以

chehongchao avatar Jan 22 '22 08:01 chehongchao

多张图片可以两两计算 耗时应该还是可以接受的 具体可以参考下 iphone的 picsew这个软件 或者微信搜索 易飞拼图这个小程序 都是类似的

两两计算貌似不行呀!需要两张图片尺寸一样才可以

这里主要针对屏幕截图等场景 一般来说尺寸(主要是宽度)肯定是一样的 如果尺寸不一样 即使经过缩放一样的话 像素损失也比较大

bikerr avatar Jan 25 '22 05:01 bikerr

像底部部分位置有点差别的图片(比如safari浏览器 滑动以后底部网址栏样式会变)以及 截取的模板是纯色区域,会出现识别到空白的地方匹配度特别高 有没有好的方式呢

caochengfei avatar Sep 07 '22 01:09 caochengfei

像底部部分位置有点差别的图片(比如safari浏览器 滑动以后底部网址栏样式会变)以及 截取的模板是纯色区域,会出现识别到空白的地方匹配度特别高 有没有好的方式呢

这个问题之前也遇到过,主要做法可以将底部变化的部分裁减掉进行匹配。另外建议新开一个issue进行讨论

bikerr avatar Sep 07 '22 07:09 bikerr

多张图的话 用第一张图(长图)的下半部分和第二张图(短图)进行处理就好了

添加函数

# 新增
from PIL import Image
import os

......
# 新增
def p_img(path1, path2, out_path):
    img1 = cv2.imread(path1)
    img2 = cv2.imread(path2)
    dst = draw(img1, img2)
    cv2.imwrite(out_path, dst)
    

def p_img_main(path1, path2, out_path, header_height):
    if not os.path.exists('./tmp'):
        os.mkdir('./tmp')
    img_1 = Image.open(path1)
    img_2 = Image.open(path2)
    crop_area_1 = (0, img_1.size[1] - img_2.size[1], img_1.size[0], img_1.size[1])
    img_tmp1 = img_1.crop(crop_area_1)
    path_tmp1 = './tmp/tmp1.png'
    img_tmp1.save(path_tmp1)
    path_tmp2 = './tmp/tmp2.png'
    p_img(path_tmp1, path2, path_tmp2)
    img_tmp2 = Image.open(path_tmp2)
    crop_area_1 = (0, 0, img_1.size[0], img_1.size[1]-img_2.size[1] + header_height)
    i1 = img_1.crop(crop_area_1)
    crop_area_2 = (0, header_height, img_tmp2.size[0], img_tmp2.size[1])
    i2 = img_tmp2.crop(crop_area_2)
    new_image = Image.new('RGB', (i1.size[0], i1.size[1] + i2.size[1]))
    new_image.paste(i1, (0, 0))
    new_image.paste(i2, (0, i1.size[1]))
    new_image.save(out_path)
   

if __name__ == "__main__":
    # 图片1路径(长图)
    img_1_path = './tmp/res.png'
    # 图片2路径(短图)
    img_2_path = './tmp/2.png'
    # 保存路径
    out_path = './tmp/res.png'
    # 头部(顶端冻结部分)高度
    header_height = 150
    p_img_main(img_1_path, img_2_path, out_path, header_height)

AojiaoKong avatar Mar 18 '25 06:03 AojiaoKong