先上结果:
图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路径下都有多张图片。