一、骰子作画
骰子作画是程序员Scott MacDonald做了一个很有趣的项目,他用一张黑底白点的骰子模拟出了一些人像照片。

任何一张图片都可以用骰子模拟出来,算法非常简单:将图片分成若干个区域,每个区域经过计算以后,用1-6之间的一个整数表示,代表骰子的一个面。这种将连续的量转化成不连续的整数的算法,属于vector quantization(矢量量化)的一个应用。
二、代码实现

# -*- coding: utf-8 -*-
from PIL import Image
import os
import numpy as np#骰子图像存储路径
imgSrc = ['xxx\\touzi1s.bmp','xxx\\touzi2s.bmp','xxx\\touzi3s.bmp','xxx\touzi4s.bmp','xxx\\touzi5s.bmp','xxx\\touzi6s.bmp']IMAGE_SAVE_PATH = "xxx\\output1.bmp"
list = np.ones((64,64))*0def e(average):if 0 < average <= 42:return 0;elif 42 < average <= 85:return 1;elif 85 < average <= 127:return 2;elif 127 < average <= 169:return 3;elif 169 < average <= 211:return 4;elif 211 < average <= 255:return 5;#定义拼接函数
def puzzle(list):to_image = Image.new('RGB', (64 * 16, 64 * 16)) #创建一个新图# 循环遍历,把每张图片按顺序粘贴到对应位置上for y in range(64):for x in range(64):age = list[y][x]src_num = e(age)from_image = Image.open(imgSrc[src_num])to_image.paste(from_image, ((x - 1) * 16, (y - 1) * 16))return to_image.save(IMAGE_SAVE_PATH) # 保存新图if __name__ == '__main__':img = Image.open("xxxxxxxx\\lena1024.bmp") # 本地图片路径img = img.convert("RGB")img_array = img.load() # 加载图片x = 16  # 横面像素大小y = 16  # 纵面像素大小for j in range(int(img.height / y)):for k in range(int(img.width / x)):a = 0for l in range(x):for m in range(y):a = (img_array[x * k + l, y * j + m][0] +img_array[x * k + l, y * j + m][1] +img_array[x * k + l, y * j + m][2]) / 3 + aa = a / (x * y)  # 计算单位面积内平均像素灰度list[j][k] = apuzzle(list)

同时我们也可以用字符来代替骰子面达到相同的效果,原理一样

# -*- coding: utf-8 -*-
from PIL import Imageif __name__ == '__main__':img = Image.open("C:\\Users\\hp\\Desktop\\数字图像处理\\骰子图像\\lena1024.bmp") # 本地图片路径img = img.convert("RGB")img_array = img.load() # 加载图片x = 5  # 横面像素大小y = 10  # 纵面像素大小for j in range(int(img.height / y)):for k in range(int(img.width / x)):a = 0for l in range(x):for m in range(y):a = (img_array[x * k + l, y * j + m][0] +img_array[x * k + l, y * j + m][1] +img_array[x * k + l, y * j + m][2]) / 3 + aa = a / (x * y)  # 计算单位面积内平均像素灰度# 根据像素灰度输出字符,灰度越大,字符越简单(偏白色)if 0 < a <= 32:print("@", end="")elif 32 < a <= 64:print("#", end="")elif 64 < a <= 96:print("$", end="")elif 96 < a <= 128:print("*", end="")elif 128 < a <= 160:print("+", end="")elif 160 < a <= 192:print("^", end="")elif 192 < a <= 224:print("~", end="")elif 224 < a <= 255:print(".", end="")print("")

-------------------------------------------分界线---------------------------------------------------小白进阶ing,
有问题欢迎大家指正!

python实现简单骰子图像相关推荐

  1. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用四:图像损痕修复

    教程: 博主之前写了24节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  2. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用一:快速截取图像中指定单个物体

    教程: 博主之前写了21节关于使用Opencv的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  3. pillow python 划线_Python用Pillow(PIL)进行简单的图像操作

    Python用Pillow(PIL)进行简单的图像操作 颜色与RGBA值 计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值.在Pillow中,RGBA的值表示为 ...

  4. python画三维几何图-Python下opencv使用笔记(二)(简单几何图像绘制)

    简单几何图像一般包含点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义. 图像的一个像素点有1或者3个值.对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值.他们表现出 ...

  5. Python下opencv使用笔记(二)(简单几何图像绘制)

    简单几何图像一般包括点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义.图像的一个像素点有1或者3个值,对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值,他们表现出不 ...

  6. 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克

    使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...

  7. 使用Python和OpenCV在图像之间执行超快速的颜色转换

    使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...

  8. 使用Python,OpenCV计算图像直方图(cv2.calcHist)

    使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...

  9. 使用Python,OpenCV从图像中删除轮廓

    使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...

最新文章

  1. python 找质数的个数_盘一盘 Python 系列特别篇 All 和 Any
  2. plotly可视化绘制双子图(subplots)
  3. 2013年中国高校网购实力排行榜
  4. vscode进行远程服务器 An SSH installation couldn't be found、
  5. 截取小数点_五年级上册系列| 小数点位置变化名师微课+课本+学案,暑假预科,很香!...
  6. MySQL事务处理与事务隔离(锁机制)
  7. python面试题汇总(1)
  8. android 隐私空间,不想用隐私空间?安卓用户原来还可以这样隐藏手机秘密
  9. Windows10 关闭自动更新
  10. python 反传播_Python:反向传播 (六十八)
  11. 解决VBox中CentOS的增强功能安装问题 及 vbox centos安装增强功能总结
  12. 参考文献中英文人名_参考文献中英文人名的写法-
  13. FT232R国产替代GP232RLUSB2.0串口芯片
  14. Crypto-Enigma密码机原理
  15. 基于Tableau的疫情数据可视化看板
  16. 苹果微信cookie传不到服务器,cookie解决微信不能存储localStorage的问题
  17. 数据结构——错误一览(概念类)
  18. Mac上常用软件-2018
  19. Markdown还能这么玩?这款开源神器绝了
  20. 支付行业对APILink的应用

热门文章

  1. 找寻“失落”的系统功能
  2. 真正高级的人生,都在努力做减法
  3. 如何深度学习技术专业相关知识点的思维认知探讨
  4. 「电子万年历matlab仿真」——基于Matlab的电子万年历仿真实现
  5. 【摘】学佛必读的十大经典佛经
  6. 天刀显示连接服务器失败,天涯明月刀手游游戏进不去怎么办 服务器已满解决办法...
  7. java criteria or_java – Criteria API组合AND / OR
  8. python隐藏数据库密码忘了怎么办_当你忘记网站上的密码时怎么办?Python如何快速帮你找回?...
  9. 胜利祝酒词(1994)
  10. qframe 绘图_QT 基本图形绘制