社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python趣味编程 | 看看如何用Python生成素描风格的自拍照,并且加上Logo

Python绿色通道 • 3 年前 • 393 次点击  

↑ 关注 + 星标 ,每天学Python新技能

后台回复【 大礼包】送你Python自学大礼包

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

Opencv + matplotlib

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

Opencv函数介绍,

介绍一下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)
绘制素描风格的照片

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

# 读取图片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()

将logo也添加到图片当中去

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

# 加载两张图片img1 = cv2.imread('sketch1.png')img2 = cv2.imread('python1.png')# 将logo放在img1的左上角,因此将image的左上角圈出来给logo用rows,cols,channels = img2.shaperoi = 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()

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

- END -

推荐阅读

  1. 5 分钟,使用内网穿透快速实现远程桌面

  2. 这几门语言要被淘汰了!别瞎学

  3. 一女程序员被判 9 个月:因薪酬等问题离职,rm -f * 删库,瘫痪 6 个小时

  4. 人脸识别的时候,一定要穿上衣服!否则 ...

  5. 高薪程序员被推到风口浪尖,真相竟然是……


推荐一个公众号,帮助程序员自学与成长

觉得还不错就给我一个小小的鼓励吧!



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/120295
 
393 次点击