快过年了,各种互联网产品都出来撒红包。某宝一年一度的集五福(shua hou)活动更是成为每年的必备活动。虽然到最后每人大概也就分个两块钱,但作为一个全民话题,大多数人还是愿意凑凑热闹。毕竟对于如今生活在大城市的人来说,集福领红包和空荡的地铁车厢或许已是最大的“年味”了。
既然是凑热闹,怎么能少得了我。前年过年我发过一篇:《一行代码扫出“敬业福”》,介绍的是OCR 文字识别的使用。今年再来对“福”字做文章,演示下如何用 python 的图像处理功能,把一幅“福”字图片转出 5 种不同的效果:
python 最图像处理最常用的两个模块是PIL和OpenCV,这里我们选择 OpenCV。
读取图片及展示代码:
因为OpenCV和matplotlib的颜色模式不一样,所以需要做一次转换,如果是直接通过 cv2 展示和保存图片则不需要。
上面的效果分别用到了以下功能:
1、灰度福
这里没有选择直接将图片转出灰度图,因为这样会导致福字不明显。而是通过将红、绿、蓝三通道分离后,选择色差最大的红色通道。
2、轮廓福
使用了 OpenCV 自带的图像轮廓提取功能。为了更好的效果,这里对红色通道进行二值化后,再查找轮廓。
3、反色福
发色的实现是将每个像素值 转成 。如果遍历像素计算会比较慢,于是用了一个小技巧:转成 numpy 的 ndarray 再进行矩阵运算。
4、膨胀福
这里其实是“图像腐蚀”操作(与“图像膨胀”操作相反)。因为在我们选取的红色通道中,白色是背景,黑色才是福字,所以对白色的“腐蚀”也就是对黑色的“膨胀”。这也是 OpenCV 的内置功能。做完这一步,又对图像进行了切割,直接通过列表的切片操作实现。
5、福到了
OpenCV 提供了翻转操作,第二个参数是旋转轴的选取,你可以试试 0 和 1 的效果。
完整代码可以在公众号(Crossin的编程教室)里回复关键字:五福
以上就是我送给大家的 5 个福。试过了,都能被扫出来。我已集齐
如果你还没凑齐,可以扫这个图。祝大家新年有福气!
其他内容回复左侧关键词获取:
python:零基础入门课程目录
新手:初学者指南及常见问题
资源:超过500M学习资料网盘地址
项目:十多个进阶项目代码实例
如需了解视频课程及答疑群等更多服务,请号内回复码上行动
欢迎加入
Crossin的编程教室
crossincode.com
大过年的,来都来了
把我们分享给身边爱学习的小伙伴吧 :)
领取专属 10元无门槛券
私享最新 技术干货