python opencv 将两张图以一定的透明度融合

本文介绍了一种将文本图片融合到背景图片上的图像处理方法。通过调整权重实现不同图片间的透明度叠加,达到合成自然的效果。该技术可用于OCR识别前的数据增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上结果:

图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路径下都有多张图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值