博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 图像处理:一福变五福
阅读量:5946 次
发布时间:2019-06-19

本文共 1616 字,大约阅读时间需要 5 分钟。

快过年了,各种互联网产品都出来撒红包。某宝一年一度的集五福(shua hou)活动更是成为每年的必备活动。虽然到最后每人大概也就分个两块钱,但作为一个全民话题,大多数人还是愿意凑凑热闹。毕竟对于如今生活在大城市的人来说,集福领红包和空荡的地铁车厢或许已是最大的“年味”了。

既然是凑热闹,怎么能少得了我。前年过年发过一篇:《》,介绍的是 OCR 文字识别 的使用。今年再来对“福”字做文章,演示下如何 用 python 的图像处理功能,把一幅“福”字图片转出 5 种不同的效果

python 最图像处理最常用的两个模块是 PILOpenCV ,这里我们选择 OpenCV。

读取图片及展示代码:

import cv2from matplotlib import pyplot as pltimg = cv2.imread('fu.png')# 转换颜色模式,显示原图img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.imshow(img)plt.show()

因为 OpenCVmatplotlib颜色模式 不一样,所以需要做一次转换,如果是直接通过 cv2 展示和保存图片则不需要。

上面的效果分别用到了以下功能:

1、灰度福

这里没有选择直接将图片转出灰度图,因为这样会导致福字不明显。而是通过将 红、绿、蓝三通道分离 后,选择色差最大的红色通道。

r,g,b = cv2.split(img)

2、轮廓福

使用了 OpenCV 自带的 图像轮廓提取 功能。为了更好的效果,这里 对红色通道进行二值化 后,再查找轮廓。

_, img_bin = cv2.threshold(r, 50, 255, cv2.THRESH_BINARY)_, contours, _ = cv2.findContours(img_bin, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)img_cont = np.zeros(img_bin.shape, np.uint8)    cv2.drawContours(img_cont, contours, -1, 255, 3)

3、反色福

发色的实现是将每个像素值 x 转成 255-x。如果遍历像素计算会比较慢,于是用了一个小技巧: 转成 numpy 的 ndarray 再进行矩阵运算

img_i = np.asarray(img)img_i = 255 - img_i

4、膨胀福

这里其实是“ 图像腐蚀 ”操作(与“ 图像膨胀 ”操作相反)。因为在我们选取的红色通道中,白色是背景,黑色才是福字,所以对白色的“腐蚀”也就是对黑色的“膨胀”。这也是 OpenCV 的内置功能。做完这一步,又对图像进行了切割,直接通过列表的切片操作实现。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(25, 25))eroded = cv2.erode(r, kernel)size = img.shapeeroded = eroded[int(size[1]*0.15):int(size[1]*0.7),int(size[0]*0.2):int(size[0]*0.85)]

5、福到了

OpenCV 提供了 翻转 操作,第二个参数是 旋转轴 的选取,你可以试试 0 和 1 的效果。

img_r = cv2.flip(img, -1)

完整代码可以在公众号( Crossin的编程教室 )里回复关键字: 五福

以上就是我送给大家的 5 个福。试过了,都能被扫出来。我已集齐

如果你还没凑齐,可以扫这个图。祝大家新年有福气!

════

其他文章及回答:

| | | | | | | | | | |

欢迎搜索及关注公众号: Crossin的编程教室

转载地址:http://cqbxx.baihongyu.com/

你可能感兴趣的文章
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>
AVG插件泄漏Chrome用户数据
查看>>
免费微信公众号专用h5在线电影票API
查看>>
专访刘刚:360手机卫士的性能监控与优化
查看>>
FB正在大规模重构React Native,预计今年发布
查看>>
从0到1:腾讯Yoo视频底层页推荐系统实践
查看>>
推荐10个CI/CD工具,用于云平台集成交付
查看>>
云平台宕机引发的系列思考,企业如何自救?
查看>>
Java EE跟JCP说再见
查看>>
整洁代码之道——重构
查看>>
Oracle加入CNCF,发布Kubernetes on Oracle Linux以及Terraform Kubernetes Cloud Installer
查看>>
Scrum指南更新:Ken Schwaber、Jeff Sutherland访谈
查看>>
在瑞士最大银行驱动创新
查看>>
CRI Shimv2:一种 Kubernetes 集成容器运行时的新思路
查看>>
机器人操作系统来到Windows
查看>>
通过规模化Scrum创造最新技术的打印机
查看>>
时序数据库DolphinDB和TimescaleDB 性能对比测试报告
查看>>
准备好了?测试人员迟早会被要求测试包含区块链技术的解决方案
查看>>
用户故事 | 刷算法面试题的4种思考方式
查看>>
Visual Studio 2017 15.9 Previews扩展C++调试功能
查看>>