栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

抠图-仿射变换-贴图 简易代码段

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

抠图-仿射变换-贴图 简易代码段

import cv2
import numpy as np
from PIL import Image
from PIL import ImageDraw


obliq_img = cv2.imread('1.png')  #倾斜影像,新的纹理
rows,cols,_ = obliq_img.shape

# img_texture = cv2.imread('2.png') #原始纹理
img_texture = Image.open('3.png')
print('img_texture.size:', img_texture.size)
width, height= img_texture.size

img_texture = np.array(img_texture)

# 平面方式变换: 仿射变换, 对图像进行变换(三点得到一个变换矩阵)
obliq_triangle = [[345,95],[306,257],[390,263]]
obliq_points = np.float32(obliq_triangle)

texture_triangle = [[255,224],[203,423],[310,428]]
texture_points = np.float32(texture_triangle)
matrix = cv2.getAffineTransform(obliq_points,texture_points) #变换矩阵
img_affine = cv2.warpAffine(obliq_img, matrix, (width, height))  #仿射变换后的图像,提供新的纹理
cv2.imwrite( './affine3.png', img_affine)

#需要替换的原始纹理 mask
# fill_mask = np.array([texture_triangle])
# texture_mask = np.zeros([rows, cols], dtype = np.uint8)
# cv2.fillPoly(texture_mask, fill_mask, 255)
# cv2.imwrite( './mask.png', mask)

new_texture = Image.open('./affine3.png')
print(new_texture.size)

new_texture = np.array(new_texture)
texture_triangle_list = [[[255,224],[203,423],[310,428]], [[270,230],[210,400],[305,390]]]

#Pillow Image: 需要替换的原始纹理 mask
mask = np.zeros((height, width), dtype=np.uint8)
mask = Image.fromarray(mask)

for texture_triangle in texture_triangle_list:
	xy = [tuple(point) for point in texture_triangle]


	draw = ImageDraw.Draw(mask)
	draw.polygon(xy, outline=255, fill=255)

mask.save('./mask4.png')
# for i in range(3):

# result_mask_1 = np.where(mask, new_texture[:,:,0], img_texture[:,:,0])
# result_mask_1 = Image.fromarray(result_mask_1)
# result_mask_2 = np.where(mask, new_texture[:,:,1], img_texture[:,:,1])
# result_mask_2 = Image.fromarray(result_mask_2)
# result_mask_3 = np.where(mask, new_texture[:,:,2], img_texture[:,:,2])
# result_mask_3 = Image.fromarray(result_mask_3)

# merge_result = Image.merge('RGB', (result_mask_1, result_mask_2, result_mask_3))


# # result_mask = result_mask.convert('RGB')
# merge_result.save('./result2.png')

# #遍历替换
# # 在纹理图片中,根据mask的位置替换新的纹理
# for i in range(rows):
# 	for j in range(cols):
# 		if texture_mask[i,j] == 255:  #0代表黑色的点
# 			img_texture[i,j] = img_affine[i,j] #此处替换颜色,为BGR通道, 更新texture

# cv2.imshow('res',img_texture)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/503815.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号