坐标:江苏某双一流高校
本人:IT爱好者
文章摘要:介绍本学期正在做的大创项目工作进展,以及总结笔者自身学习收获和体会,包括在学习过程中对现有方法的整合与完善。
这个阶段我们主要在学贴图,而贴图主要借助Python+OpenCV实现,鉴于之前笔者没接触过这方面知识,于是决定寻找度娘,现学现用。
第一阶段 它山之石,可以攻玉
当天开会确定最新分工后,我们几个开始了贴图的学习。当天中午回到宿舍后,就开始搜索关于贴图的方法。在CSDN上找了好久,好不容易才找到我要找的,这时才发现我要找的是无缝合成图片方法。如下两张图是我找的一部分:

图1
详细链接:https://blog.csdn.net/sinat_41104353/article/details/85161174?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

图2
详细链接:https://blog.csdn.net/u013298384/article/details/48227519?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160239509219726892405226%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160239509219726892405226&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-10-48227519.pc_first_rank_v2_rank_v28&utm_term=OpenCV%E8%B4%B4%E5%9B%BE&spm=1018.2118.3001.4187
虽然相关的文章并不多,但找到几篇相关的还是很开心。但经过几天的思考与研究,才发现只有第一篇博文有效,这时才知道原来OpenCV可以用python和C++两种方式实现(而我要的是前者),于是选择以第一篇博文来实践。
第二阶段 复现博文
在仔细阅读完博文,查阅相关知识后,开始着手下载所需原图片,安装Python的OpenCV库(这里笔者安装的是OpenCV2)
pip install opencv-python #第一次安装第三方库的注意要换国内源,阿里云、清华镜像、中科大镜像等等,这样下载速度很快,具体操作详见百度
然后按照博文的步骤来,结果一直出现错误。在参考评论区的建议之后,对图片的大小进行修改(问题就是目标图与被贴图的大小不匹配),最后出来的图与预期的一致。

合成图
最后附上代码:
'''
要点:
1. 飞机的图片大小调整为 300×194
2. 背景的图片大小调整为1000×561
'''
import cv2
import numpy as np
#图片读取
src = cv2.imread("plane.jpg")
dst = cv2.imread("sky.jpg")
#在飞机周围生成掩膜
src_mask = np.zeros(src.shape, src.dtype)
#改善生成效果
poly = np.array([ [4,80], [30,54], [151,63], [254,37], [298,90], [272,134], [43,122] ], np.int32)
cv2.fillPoly(src_mask, [poly], (255, 255, 255))
#这是飞机图的中心所在位置
center = (800,100)
#调用OpenCV库的无缝合成方法 此处用混合合成
output = cv2.seamlessClone(src, dst, src_mask, center, cv2.MIXED_CLONE)
#将生成的图片进行保存
cv2.imwrite("result.jpg", output)
最近心血来潮想要写博客,所以花了点时间总结一下前段时间进展便匆匆上手了。因时间有限,有些地方表达可能不是很好,各位看官求请吐槽。有时间再来更新。