Python opencv は 2 つの画像を一定の透明度でマージします

まず結果:

図1:

図2:

融合結果:

コード:

#-*- coding:utf-8 -*-
import cv2
import numpy as np
import random
import os


if __name__=='__main__':
    bg_path = r'G:\PAdatasets\openDatasets\OCR\collectOcrData\high_resolution_img'
    pages_path = r'G:\check\ocr\hccr\data\hwdb2\syn_page_hwdb2\pages'
    bgs = os.listdir(bg_path)

    for i, page in enumerate(os.listdir(pages_path)):
        page_img = cv2.imread(os.path.join(pages_path, page))
        page_img = cv2.resize(page_img, (1000, 800))
        if i<len(os.listdir(pages_path)) * 0:
            syn_page = page_img
        else:
            random.shuffle(bgs)
            bg = bgs[0]
            bg_img = cv2.imread(os.path.join(bg_path, bg))
            page_img = cv2.resize(page_img, (1000, 800))

            page_h, page_w = page_img.shape[:2]
            bg_h, bg_w = bg_img.shape[:2]
            if page_h * page_w >= bg_h * bg_w:
                bg_img_new = cv2.resize(bg_img, (page_w, page_h))
            else:
                bg_img_new = cv2.resize(bg_img, (page_w, page_h), interpolation=cv2.INTER_AREA)
            _, syn_binary_inv = cv2.threshold(page_img, 200, 1, cv2.THRESH_BINARY_INV)
            _, syn_binary = cv2.threshold(page_img, 200, 1, cv2.THRESH_BINARY)
            bg_weight = round(random.sample(np.arange(0.1, 0.5, 0.05).tolist(), 1)[0], 2)
            page_weight = 1 - bg_weight
            syn_page = (cv2.addWeighted(syn_binary_inv * bg_img_new, bg_weight, syn_binary_inv * page_img, page_weight,
                                      0)) + syn_binary * bg_img_new
        cv2.imshow('0', syn_page)
        cv2.imshow('1', page_img)
        cv2.imshow('2', bg_img)
        cv2.waitKey(0)
        break

私のbg_pathとpages_pathにはそれぞれ背景画像とテキスト画像が保存されており、bg_pathとpages_pathの両方のパスの下に複数の画像があります。

おすすめ

転載: blog.csdn.net/qq_36076233/article/details/109516302