globalmapper如何选取图像上的点_python 图像处理:一福变五福

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

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

1609b7545d885a6821c67ad5ee2e3f53.png

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

读取图片及展示代码:

import cv2
from matplotlib import pyplot as plt img = 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.shape
eroded = 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 个福。试过了,都能被扫出来。我已集齐c14997c5ac57304613de9e7e5f9f8bbc.png

01284a8664067ee6fa8b006763d30a4f.png

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

9523f764730a7261042a86ab9c645c23.png


其他内容回复左侧关键词获取:

python :零基础入门课程目录

新手 :初学者指南及常见问题

资源 :超过500M学习资料网盘地址

项目 :十多个进阶项目代码实例

如需了解视频课程及答疑群等更多服务,请号内回复 码上行动

代码相关问题可以在论坛上发帖提问 bbs.crossincode.com

推荐阅读:

 Python转行 | 爬抖音 | AI名画 | 如何debug | 查天气 | 我用Python | 知乎 | 排序 | 电影票 | 技术宅 | 单词表 | 新手建议 | 如何提问 | 一图学Python | 智能防挡弹幕 


欢迎加入

Crossin的编程教室

crossincode.com

9368e32fe960263ba0407333b0d7b4f0.png

  大过年的,来都来了

把我们分享给身边爱学习的小伙伴吧 :)  

点击文末“”,查看更多学习资源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值