ITPub博客

首页 > 数据库 > 数据库开发技术 > 【每周一坑】生成九宫格图片

【每周一坑】生成九宫格图片

原创 数据库开发技术 作者:Crossin的编程教室 时间:2018-05-25 10:00:00 0 删除 编辑

我们的每N周一坑栏目又来了。

之前我们有过和图像处理相关的题目:
【每周一坑】用代码给图片配上文字
【每周一坑】缩小图片尺寸

今天再来一个和图片有关的:图片切割。

非常简单的功能,但在开发中很常见,很多网页/应用里缩略图都是对图片进行缩放+切割得到的。

增加一点点趣味性,我们的要求是:

把一张图片切成 3 x 3 九张小图

这样就可以把它们发在朋友圈重新组成一张大图了。

示例:
原图

效果

当然,原图是正方形效果最好。

附加题:

  1. 对于不是正方形的原图,截取中间尽可能大的正方形区域,再分割成九张小图(需考虑长>宽和长<宽两种情况)

  2. 切图时将朋友圈小图之间的间隔考虑进去,使拼接出的大图看起来更连续

提示:仍然用之前提到过的 PIL 库,里面的 crop 方法即可实现(py3 安装包名为 pillow)。

参考代码将在下周给出,或看看其他同学在留言中提交的代码。

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.com 或 

codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。


【解答】蜥蜴流感与贝叶斯定理

案例本身是一个典型的条件概率,用贝叶斯定理即可算出概率,概率统计的书籍和网上都可以搜到详细解释。

P = (0.01 * 0.9) / (0.01 * 0.9 + (1 - 0.01) * 0.09)
= 0.0917

而我们的问题是要模拟这个场景。所以我们可以循环10万次,用 random 模块根据已知的概率来“产生”病例和阳性结果,并统计最终实际的阳性患病率。

给出一份参考代码:

import random
# 定义个体
class Man:    flu = False #是否患病
   test = False #是否阳性
# 产生10万个体,随机患病和检测状况
all_people = []
for i in range(100000):    m = Man()
   # 患病概率
   if random.random() < 0.01:        m.flu = True
   # 真阳性概率
   if m.flu and random.random() < 0.9:        m.test = True
   # 假阳性概率
   if not m.flu and random.random() < 0.09:        m.test = True    all_people.append(m)
# 统计个数
positive_people = [m for m in all_people if m.test] print(len(positive_people)) positive_flu = [m for m in positive_people if m.flu] print(len(positive_flu))
# 实际患病者在阳性者中的比例
print(len(positive_flu)/len(positive_people))

这里先模拟生成了10万份数据,然后统计结果。当然也可以边生成边统计,@Mr. wang、@铭记、@L、@杀哥 就是用的类似方法,有的写得比我还更简洁。

同时提交解答的还有 @Jzy、@灿夜、@冬日炎炎。感谢各位同学的参与,希望下次继续。

期待在下一期中看到你的代码!



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

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


推荐阅读:

朋友圈 | 电影票 | 百万关注 | 技术宅 | 火车票 | 单词表 | 押韵工具 | 新手建议 | 就业 | 知乎 | 排序



欢迎加入

Crossin的编程教室

crossincode.com


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

☟点击“阅读原文”,查看更多学习资源

原文作者:Crossin的编程教室;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2015-06-05

  • 博文量
    498
  • 访问量
    200490