使用Python生成素描风格的自拍照,并且加上Logo

3c9cf62ef7ddac4bc26f43135d12ced5.png

可能对于女生来说,有一张手绘风格的自拍照也是一件值得开心的事儿,或许对男生来说也是一样的道理,今天小编就来分享一下如何用Python来生成一张手绘风格的自拍照,并且加上我们所要用到的logo,我们用到的是Python当中的opencv模块

6708f6e6c86af9d7483da4eeb5dca5f1.png

Opencv + matplotlib

4fc3a4896e30daf44c973f717d5bfa7d.png

本方法需要用到的库:cv2、matplotlib。cv2是基于OpenCV的图像处理库,用来对图像进行各种操作,包括图片的旋转翻转、两张图片的合并等等,而matplotlib库则是用来进行数据可视化的模块,相信大家也都熟悉,

e0b25d130c6aeaac1baf0bf0f725158f.png

Opencv函数介绍,

f0ff820f84ab815d5f6b24383a38ce1b.png

介绍一下cv2的三个基本函数:cv2.imread(image),cv2.imshow()以及cv2.imwrite()分别用来读取图片、显示和保存图片

# 读取图片
img = cv2.imread('test1.png')
# 显示图片
cv2.imshow('test1.png',img)
cv2.waitKey(0)
# 保存图片
cv2.imwrite('test_2.png', img)

72fe9ad8af905b329d53c11232426df1.png

绘制素描风格的照片

621363f4ed66b26cf44586e6e5066dde.png

然后我们来看一下完整的代码

# 读取图片
img=cv2.imread("test1.jpg")
# 将图像转化成灰度图
grey_img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
invert_img=cv2.bitwise_not(grey_img)
# 对图片进行模糊化处理
blur_img=cv2.GaussianBlur(invert_img, (111,111),0)
invblur_img=cv2.bitwise_not(blur_img)
sketch_img_test=cv2.divide(grey_img,invblur_img, scale=256.0)
# 保存好素描风格的图片
cv2.imwrite('sketch1.png', sketch_img)

然后来为大家解释一下上面代码的大致意思,也就是在读取图片之后,将彩色的图片转换成灰度图,然后给灰度图进行模糊化处理之后输出,最后出来的结果如下图所示,我们用matplotlib模块中的相关方法将两张图同时显示出来

plt.figure(figsize=(12,8))
plt.subplot(1,2,1)
plt.title('Original_Image', size=10)
plt.imshow(RGB_img)
plt.axis('off')
plt.subplot(1,2,2)
plt.title('Sketch_Image', size=10)
rgb_sketch_test1=cv2.cvtColor(sketch_img_test, cv2.COLOR_BGR2RGB)
plt.imshow(rgb_sketch_test1)
plt.axis('off')
plt.show()

465f18be42cde95cc1e04364c6f4bdef.png

f4fe22d6088ba380353139e0f97a9b97.png

将logo也添加到图片当中去

799826d1b1c6048b20a983d969551b50.png

素描风格的图片做出来了之后,小编又想,是不是再给图片上一个logo会显得更好一些呢?说干就干,完整的代码如下

# 加载两张图片
img1 = cv2.imread('sketch1.png')
img2 = cv2.imread('python1.png')
# 将logo放在img1的左上角,因此将image的左上角圈出来给logo用
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols]
# 将logo图变成灰度图
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# 将img1左上角圈出来的区域和logo图合并到一块儿
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols] = dst
# 显示最后的结果出来
cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

最后出来的结果我们看一下,

ac5eec64ae29341eae8d9912f17ae78b.png

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值