0
点赞
收藏
分享

微信扫一扫

使用opencv将png图片放到png或者jpg图片任意位置


使用opencv将png图片放到png或者jpg图片任意位置_深度学习

使用opencv将png图片放到png或者jpg图片任意位置_opencv_02

使用opencv将png图片放到png或者jpg图片任意位置_计算机视觉_03

import cv2
import numpy as np
def gen_png_to_jpg(png_path,jpg_path,png_size=(),jpg_size=(),png_in_jpg_p=(0,0),out_path="",show=True):
png_image = cv2.imread(png_path, cv2.IMREAD_UNCHANGED)
jpg_image = cv2.imread(jpg_path, cv2.IMREAD_UNCHANGED)
if jpg_size:
jpg_image=cv2.resize(jpg_image,jpg_size)
a_mask = png_image[:, :, -1]
x, y = np.where(a_mask == 255)
x_min = min(x)
x_max = max(x)
y_min = min(y)
y_max = max(y)
# 裁剪到最小
new_png = png_image[x_min:x_max, y_min:y_max, :3].copy()
new_mask = png_image[x_min:x_max, y_min:y_max, -1:].copy()
if png_size:
new_png=cv2.resize(new_png, png_size)
new_mask=cv2.resize(new_mask,png_size)
new_mask=new_mask.reshape(new_mask.shape[0],new_mask.shape[1],1)
re_mask = (~new_mask == 255)
if png_in_jpg_p[0]+re_mask.shape[1]<jpg_image.shape[1] or png_in_jpg_p[1]+re_mask.shape[0]<jpg_image.shape[0]:


jpg_image[png_in_jpg_p[1]:re_mask.shape[0]+png_in_jpg_p[1], png_in_jpg_p[0]:re_mask.shape[1]+png_in_jpg_p[0], :] *= re_mask
jpg_image[png_in_jpg_p[1]:re_mask.shape[0]+png_in_jpg_p[1], png_in_jpg_p[0]:re_mask.shape[1]+png_in_jpg_p[0], :] += new_png
if out_path:
cv2.imwrite(out_path,jpg_image)
if show:
cv2.imshow("",jpg_image )
cv2.waitKey()

def gen_png_to_jpg_p(png_path,jpg_path,png_size=(),jpg_size=(),png_in_jpg_p=(0,0),out_path="",show=True):
png_image = cv2.imread(png_path, cv2.IMREAD_UNCHANGED)
if type(jpg_path)==type(""):
jpg_image = cv2.imread(jpg_path, cv2.IMREAD_UNCHANGED)
else:
jpg_image=jpg_path
if jpg_size:
jpg_image=cv2.resize(jpg_image,jpg_size)
a_mask = png_image[:, :, -1]
x, y = np.where(a_mask == 255)
x_min = min(x)
x_max = max(x)
y_min = min(y)
y_max = max(y)
# 裁剪到最小
new_png = png_image[x_min:x_max, y_min:y_max, :3].copy()
new_mask = png_image[x_min:x_max, y_min:y_max, -1:].copy()
if png_size:
new_png=cv2.resize(new_png, png_size)
new_mask=cv2.resize(new_mask,png_size)
new_mask=new_mask.reshape(new_mask.shape[0],new_mask.shape[1],1)
re_mask = (~new_mask == 255)
if png_in_jpg_p[0]+re_mask.shape[1]<jpg_image.shape[1] or png_in_jpg_p[1]+re_mask.shape[0]<jpg_image.shape[0]:


jpg_image[png_in_jpg_p[1]:re_mask.shape[0]+png_in_jpg_p[1], png_in_jpg_p[0]:re_mask.shape[1]+png_in_jpg_p[0], :] *= re_mask
jpg_image[png_in_jpg_p[1]:re_mask.shape[0]+png_in_jpg_p[1], png_in_jpg_p[0]:re_mask.shape[1]+png_in_jpg_p[0], :] += new_png
if out_path:
cv2.imwrite(out_path,jpg_image)
if show:
cv2.imshow("",jpg_image )
cv2.waitKey()
return jpg_image
def gen_pngs_to_jpg(jpg_path,png_path_list,png_size_list=None,jpg_size=(),png_in_jpg_p_list=None,out_path="",show=True):

for i,png_path in enumerate(png_path_list):
jpg_path=gen_png_to_jpg_p(png_path=png_path,jpg_path=jpg_path,jpg_size=jpg_size,png_size=png_size_list[i], png_in_jpg_p=png_in_jpg_p_list[i],out_path="",show=False)
if show:
cv2.imshow("",jpg_path)
cv2.waitKeyEx()
if out_path:
cv2.imwrite(out_path,jpg_path)




if __name__ == '__main__':
# gen_png_to_jpg("457788647446175.png","837709647446145.jpg",png_in_jpg_p=(1,50))
gen_pngs_to_jpg("837709647446145.jpg",png_path_list=["457788647446175.png","457788647446175.png"],jpg_size=(),png_size_list=[(100,50),(100,50)],png_in_jpg_p_list=[(1,50),(103,50)])



举报

相关推荐

0 条评论